2012-08-10 64 views
0

我有如下表:SQL服务器获得最大

ID Date FirstName Dept 
1 1/2/12 James  Act 
1 2/5/12 Mike  IT 
2 5/6/12 Joe  HR 
2 7/6/12 Keith  IT 

我需要做的,对于每个ID是什么,我需要得到最大的日期。 我需要为每个具有最大日期的ID显示ID,日期,名字,部门记录。 所以在这种情况下ID为1,我会显示1 2/5/12 Mike IT 如何在SQL Server T-SQL中执行此操作?我知道我需要做群组。

表名是TblAct

回答

2

您将使用MAX()功能与GROUP BY

select t1.id, t1.date, t1.fname, t1.dept 
from tblAct t1 
inner join 
(
    SELECT Max(Date) maxdate, ID 
    from TblAct 
    GROUP BY id 
) t2 
    on t1.id = t2.id 
    and t1.date = t2.maxdate 

SQL Fiddle with Demo

+0

bluefoot,请看看我修改了什么。谢谢 – 2012-08-10 00:53:55

+0

@NathanP看我的编辑 – Taryn 2012-08-10 00:55:03

+0

有没有办法做到这一点在选择vs内联合? – 2012-08-10 00:57:50

0

您可以使用Windows /排序功能做到这一点:

select ID, Date, FirstName, Dept 
from (select t.*, 
      row_number() over (partition by id order by date desc) as seqnum 
     from t 
    ) t 
where seqnum = 1 

这是订购所有按日期排序每个id的行,顺序相反。然后选择其中的第一个。

0

不使用group by:

select * from tblAct t1 
where date=(select max(date) from tblAct where t1.id = id) 

只是享受。