2017-05-30 103 views
1

我有一个表[VotingStatusHistory] ​​选择独特MEMBERID

与列

[MemberID] | [AffilliationDate] 

MemberID可以有多个AffilliationDates

31009 - 2011-04-28  
31009 - 2010-04-28  
31009 - 2009-04-28  
31009 - 2008-04-28  
31009 - 2007-04-28  
31009 - 2006-04-28 

现在我想选择MEMBERID的谁只有一个2006 AffilliationDates没有其他记录。

在此先感谢

+1

因此,只有具有一个关联日期和该日期年的成员ID必须是2006年?分(年)= 2006年和最大(年)= 2006年?或者没有其他任何事情,你只是表示你只想在结果中看到memberID列? – xQbert

回答

1

使用NOT IN ...

SELECT * 
FROM VotingStatusHistory 
WHERE DATEPART(year,AffiliationDates) = 2006 
AND MemberID NOT IN (SELECT MemeberID FROM VotingStatusHistory WHERE DATEPART(year,AffiliationDates) <> 2006) 
+0

嗨,这对我工作,谢谢你! –

+0

没问题@raincheck – scsimon

-1

你在看这个吗?

Select * from yourtable where year(AffiliationDates) = 2006 
+3

不过滤“没有别的”要求 –

0

您可以使用NOT EXISTS像这样:

SELECT * 
FROM VotingStatusHistory T1 
WHERE YEAR(T1.AffiliationDates) = 2006 
    AND NOT EXISTS (
         SELECT  NULL 
         FROM  VotingStatusHistory T2 
         WHERE  YEAR(T2.AffiliationDates) <> 2006 
           AND T1.MemberID = T2.MemberID 
        ) 
-1
select MemberID, 
from VotingStatusHistory 
group by MemberID 
having sum(case when year(AffilliationDate)=2006 then 0 else 1 end)=0 
0

使用除集合运算符。为什么没有人学习这些?

select vs.MemberID from dbo.VoterStatusHistory as vs 
where vs.AffiliationDate >= '20060101' and vs.AffiliationDate < '20070101' 
except 
select vs.MemberID from dbo.VoterStatusHistory as vs 
where vs.AffiliationDate < '20060101' or vs.AffiliationDate >= '20070101'