在特定日期之前查找没有活动的人

时间:2016-02-16 02:08:05

标签: sql sql-server sql-server-2008

我的问题是找到一个自2011年12月1日或之前没有任何活动的非活跃人士。

PersonID   Activity
----------------------
Alvin      Jan-08-2010
Alvin      Mar-11-2011
Alvin      Feb-11-2015
Simon      Nov-20-2010
Simon      Jan-23-2011
Simon      Jul-03-2011
Simon      Nov-04-2011
Theodore   Mar-09-2010
Theodore   Oct-08-2013
Dave       Aug-13-2012
Dave       Jun-01-2014
Dave       Apr-23-2015
Ian        Aug-09-2010
Ian        Nov-30-2010
Ian        Jan-25-2011
Ian        Mar-14-2011
Clare      Sep-03-2011
Clare      Aug-15-2014
Gale       Jun-18-2010
Gale       Dec-03-2010

输出:

PersonID   Activity
----------------------
Simon      Nov-20-2010
Simon      Jan-23-2011
Simon      Jul-03-2011
Simon      Jul-04-2011
Ian        Aug-09-2010
Ian        Nov-30-2010
Ian        Jan-25-2011
Ian        Mar-14-2011
Gale       Jun-18-2010
Gale       Dec-03-2010

期望的输出:

PersonID 
--------- 
Simon
Ian
Gale

首选所需的结果,因为它会告诉我不活跃的人。

3 个答案:

答案 0 :(得分:2)

脱离我的头顶......这样的事情应该这样做

SELECT PersonID
FROM TableName
GROUP BY PersonID
HAVING MAX(Activity) <= '2011-12-01'

答案 1 :(得分:0)

您需要先使用条件过滤掉所有条目,然后在结果集上应用DISTINCT

SELECT DISTINCT PersonID
FROM YourTableName
WHERE Activity <= 'Dec-01-2011'

答案 2 :(得分:0)

简单的GROUP BYHAVING可以解决问题:

SQL Fiddle

SELECT PersonID
FROM tbl
GROUP BY PersonID
HAVING COUNT(CASE WHEN Activity > '20111201' THEN 1 END) = 0