SQL Server:从最新日期的重复列中进行选择

时间:2013-11-29 12:17:33

标签: sql sql-server

我以(缩写)形式(包括样本数据集)继承了SQL Server表:

| SID | name  | Invite_Date |    
|-----|-------|-------------|    
| 101 | foo   | 2013-01-06  |   
| 102 | bar   | 2013-04-04  |    
| 101 | fubar | 2013-03-06  | 

我需要选择所有SIDInvite_date,但如果有重复SID,则只需获取最新条目(按日期)。

所以上面的结果看起来像是:

101 | fubar | 2013-03-06  
102 | bar   | 2013-04-04

请任何想法。

N.B Invite_date列已被声明为nvarchar,因此要使用CONVERT(DATE, Invite_date)

的日期格式

3 个答案:

答案 0 :(得分:2)

您可以在ROW_NUMBER中使用DENSE_RANKCTE WITH CTE AS ( SELECT SID, name, Invite_Date, rn = Row_Number() OVER (PARTITION By SID Order By Invite_Date DESC) FROM dbo.TableName ) SELECT SID, name, Invite_Date FROM CTE WHERE RN = 1

Row_Number

ranking function

如果您希望每个组只有一行,请Dense_Rank使用Invite_Date,如果您希望每个组的所有最后Invite_Date行重复最多 - {{1}},请{{1}}。

答案 1 :(得分:1)

select t1.*
from your_table t1
inner join
(
  select sid, max(CONVERT(DATE, Invite_date)) mdate
  from your_table
  group by sid
) t2 on t1.sid = t2.sid and CONVERT(DATE, t1.Invite_date) = t2.mdate

答案 2 :(得分:0)

select 
    SID,name,MAX(Invite_date) 
FROM 
    Table1
GROUP BY
    SID

http://sqlfiddle.com/#!2/6b6f66/1