选择顶部重复记录

  • 本文关键字:记录 顶部 选择 sql
  • 更新时间 :
  • 英文 :


我目前有多条记录,但只需要一条记录。我试过交叉应用程序,但似乎我错过了一些我自己似乎无法ping到的东西。相反,我得到了一个完全不同的值,它甚至不在提供的表中的记录中。

如有任何帮助,我们将不胜感激。

id         subject          enrollmentdate    roomNum  
00045       science         3-3-2016             98
00045       science         3-3-2016             52
00089       math            7-25-2017            13
00089       math            7-25-2017            56
00123       social studies  3-1-2016             02
00136       gym             5-2-2017             01
00159       math            9-2-2017             96 

查询:

select  d.id, c.subject, c.Enrollmentdate, ds.roomNum
from  #classrooms as c 
cross apply 
(select top 1 roomNum, subject,Enrollmentdate
from  #classrooms 
where subject = c.subject
and enrollmentdate = c.enrollmentdate
order by id desc) as ds

结果:

id         subject          enrollmentdate    roomNum  
00045       science         3-3-2016             66
00045       science         3-3-2016             66

如果您只需要一个(并且不太关心哪个(,那么这样的东西可能会有所帮助:

select id, 
subject, 
enrollmentdate, 
max(roomnum) max_roomnum
from #classrooms
group by id, 
subject, 
enrollmentdate;

如果您想要一个特定的,您可以使用top with ties:

select top (1) with ties c.*
from #classrooms c
order by row_number() over (partition by id, subject, enrollmentdate order by roomNum desc);

或者对于一个真正随机的:

select top (1) with ties c.*
from #classrooms c
order by row_number() over (partition by id, subject, enrollmentdate order by newid() desc);

最新更新