0

我有下表:

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

4

3 回答 3

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

于 2012-08-10T00:48:55.590 回答
0

您可以使用窗口/排名功能做到这一点:

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 的所有行进行排序。然后它选择其中的第一个。

于 2012-08-10T01:09:13.020 回答
0

不要使用分组:

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

享受就好。

于 2012-08-10T01:18:35.223 回答