我有一张表员工,其中包含过去和过去的数据。有相同员工编号的多个条目。
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
答案 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分组(或分区)行,然后按降序日期顺序编号行。