获取分组中的第一行

以下表为DimWorkItem表,要查询每个任务每天最新的工时

Id Title ChangedDate Person TodayHours
1 银行卡代扣协议签约 2015/3/2 16:34:21 张三 2
1 银行卡代扣协议签约 2015/3/3 10:14:37 张三 3
1 银行卡代扣协议签约 2015/3/3 15:03:56 张三 2.5
2 密码变更 2015/3/2 09:03:20 李四 4
2 密码变更 2015/3/3 14:40:51 李四 2

 

select t.Id,t.Title,t.ChangedDate,t.Person,t.TodayHours
  from
(select a.Id,a.Title,a.Person,
    CONVERT(varchar(12) ,a.ChangedDate, 111 ) ChangedDate,
    a.ChangedDate,
    a.TodayHours,

  --按任务ID和更改日期分组,并按更改日期排序,获取第一行
     row_number() over(partition by Id,CONVERT(varchar(12) ,a.ChangedDate, 111 ) order by ChangedDate desc) rk 
  from Tfs_Warehouse.dbo.DimWorkItem a ) t
 where t.rk = 1

查询结果如下:

Id Title ChangedDate Person TodayHours
1 银行卡代扣协议签约 2015/3/2 16:34:21 张三 2
1 银行卡代扣协议签约 2015/3/3 15:03:56 张三 2.5
2 密码变更 2015/3/2 09:03:20 李四 4
2 密码变更 2015/3/3 14:40:51 李四 2
posted @ 2015-03-05 15:47  虎虎小猫咪  阅读(194)  评论(0编辑  收藏  举报