2015-11-05 54 views
0
Select drl.id, drl.ap, drl.sqn, drl.date 
from srs_drl drl 

在此就OUT输出是这样的:回到最早的记录一组

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列分组的第一条记录。

在此先感谢

回答

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 

或者,NOT EXISTS返回行,如果没有一个具有相同drl.id,drl.ap,drl.sqn是甚至更早:

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) 

注意,日期是ANSI SQL的保留字,所以你可能需要写"date"

+0

或在方括号中包裹'日期' - 'drl。[date]' – InbetweenWeekends

+0

那些d * mn方括号...是的,它们也适用。 – jarlh

+0

谢谢jarlh!我使用了GROUP BY,它工作得很好。非常感谢,实质上这是一个很容易解决的问题,我只是有一个真正的思想空白 - 在一天的工作结束时,这并没有帮助它在16:45。 – gb332