GROUP结果集BY列提供了组中的元素具有不同的具有特定值的列

时间:2013-12-05 20:10:58

标签: sql sql-server-2008

如果我有一个如下所示的表格,并且我想找到每个ID的最大日期,只要ID组中至少有一个元素的Info值为1.因此,两者都不包括ID 2 ID为2的元素的信息值为2.包含ID 1和3,因为这些ID字段至少有1个Info值为1的元素。

ID        Date       Info
---------------------------
1      01-01-2013     1
1      02-02-2013     2
1      03-03-2013     2
2      01-01-2013     2
2      04-04-2013     2
3      01-01-2013     3
3      05-05-2013     1
3      06-06-2013     1

所以输出看起来像这样。

ID      MaxDate   
-----------------
1      03-03-2013     
3      06-06-2013     

非常感谢你的帮助。

2 个答案:

答案 0 :(得分:0)

这对你有用吗?

Select id, max(date)
From my_table
where id in (select id from my_table where info = 1)
group by id

答案 1 :(得分:0)

您可以使用EXISTS谓词来检查给定ID存在info = 1的记录

SELECT  T.ID, MaxDate = MAX(T.Date)
FROM    T
WHERE   EXISTS
        (   SELECT  1
            FROM    T T2
            WHERE   T2.ID = T.ID
            AND     T2.Info = 1
        )
GROUP BY T.ID;

您可以使用HAVING子句中的条件聚合实现相同的功能:

SELECT  T.ID, MaxDate = MAX(T.Date)
FROM    T
GROUP BY T.ID
HAVING COUNT(CASE WHEN T.Info = 1 THEN 1 END) > 0;