Sql 选择顶部重复记录

Sql 选择顶部重复记录,sql,Sql,我目前有多条记录,但我只需要一条记录。我尝试过交叉应用,但似乎我错过了一些我自己似乎无法理解的东西。相反,我得到了一个完全不同的值,它甚至不在提供的表中的记录中 任何帮助都将不胜感激 id subject enrollmentdate roomNum 00045 science 3-3-2016 98 00045 science 3-3-2016 5

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

任何帮助都将不胜感激

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;
如果您只需要一个(并且不太关心哪一个),那么下面的内容可能会有所帮助:

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

如果您想要一个特定的,您可以使用带领带的
top

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);

如果您想要一个特定的,您可以使用带领带的
top

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);

您想选择哪一条记录?我们可以根据什么规则找到它?分组类似的行似乎是您所需要的。你能举一个你想分组的行的例子吗?在“相似”比较中,您将包括哪些列?您希望选择哪一条记录?我们可以根据什么规则找到它?分组相似的行似乎是您所需要的。你能举一个你想分组的行的例子吗?在“相似”比较中,您会包括哪些列?