返回组中的最早记录

时间:2015-11-05 13:33:09

标签: sql sql-server

Select drl.id, drl.ap, drl.sqn, drl.date 
from srs_drl drl

这将输出如下内容:

14000001  01  01  05/11/2015
14000001  01  01  06/11/2015
14000001  01  01  01/12/2015
14000001  01  01  04/01/2016
15000234  01  02  05/11/2015
15000234  01  03  06/11/2015
15000234  01  03  01/12/2015
15000234  01  04  04/01/2016

对于每个唯一的前3列,我需要检索最早的日期。因此,对于上表,我希望返回:

14000001  01  01  05/11/2015
15000234  01  02  05/11/2015
15000234  01  03  06/11/2015
15000234  01  04  04/01/2016

非常感谢您对此查询的任何帮助。我尝试过使用TOP,但只返回整个表的第一条记录,而不是按前3列分组的第一条记录。

提前致谢

1 个答案:

答案 0 :(得分:2)

GROUP BY结合MIN

Select drl.id, drl.ap, drl.sqn, MIN(drl.date)
from srs_drl drl
group by drl.id, drl.ap, drl.sqn

或者,如果没有人使用相同的drl.id,drl.ap,drl.sqn,则NOT EXISTS返回一行:

Select drl.id, drl.ap, drl.sqn, drl.date
from srs_drl drl
where not exist (select 1 from from srs_drl d2
                 where d2.id = drl.id
                   and d2.ap = drl.ap
                   and d2.sqn = drl.sqn 
                   and d2.date < drl.date)

请注意,date是ANSI SQL中的保留字,因此您可能需要编写"date"