获取每个月的员工最大记录

时间:2015-07-15 20:35:19

标签: sql sql-server

我有一张表员工,其中包含过去和过去的数据。有相同员工编号的多个条目。

S.no       EmpNumber   CreatedDate(dd-mm-yyyy)
--------------------------------------
1          1234         01-05-2000 
2          1234         02-05-2000
3          1234         03-06-2000
4          1234         04-07-2000
1          9999         03-08-2000
2          9999         04-08-2000

我需要根据创建的日期和时间只查看员工编号的一条记录。 s.no.即如果员工在一个月内完成两次更改,则应检索最新的一次。

预期输出:

S.no       EmpNumber   CreatedDate(dd-mm-yyyy)
--------------------------------------
2          1234         02-05-2000
3          1234         03-06-2000
4          1234         04-07-2000
2          9999         04-08-2000

1 个答案:

答案 0 :(得分:0)

有几种方法可以做到这一点,但最简单的方法是使用row_number()窗口函数,如下所示:

select * from (
 select 
  *, 
  rn = ROW_NUMBER() over (partition by empnumber, year(createddate), month(createddate) order by createddate desc) 
  from t 
) x where rn = 1

row_number函数将根据empnumber,year和month分组(或分区)行,然后按降序日期顺序编号行。