删除带有条件的重复记录

时间:2015-08-25 04:17:17

标签: sql sql-server tsql

下面是我的表结构及数据:

ID   Date                       EmpId

67   2015-08-24 10:44:33.087    293
68   2015-08-24 10:41:49.950    293
69   2015-08-24 10:42:49.951    293
70   2015-08-24 10:45:15.157    013
71   2015-08-24 10:46:33.131    013
72   2015-08-24 10:42:33.134    013
73   2015-08-24 10:47:33.136    013

ID列是自动生成的列。 每位员工有2条或2条以上的记录。在这种情况下。 EmpId - 293有三条记录。 013共有4条记录。我正在寻找一个查询来返回每个员工的最大日期记录。在这种情况下,结果应如下所示:

ID    Date                        EmpId

69    2015-08-24 10:44:33.087     293
73    2015-08-24 10:47:33.136     013

我的要求是返回结果集中的所有3列。

2 个答案:

答案 0 :(得分:3)

select ID,Date,EMPID
from (
    select ID, Date, EMPId, ROW_NUMBER() over (partition by EMPId order by Date desc) as RowNUm
    from Employee
) A
where RowNUm = 1

答案 1 :(得分:0)

此查询对我有用:

SELECT
t.ID, t._Date, t.EmpId
FROM test t
LEFT JOIN test t_theta 
  ON t.EmpId = t_theta.EmpId 
  AND t._Date < t_theta._Date
WHERE
  t_theta.ID IS NULL

基本上,您使用theta join将表连接到自身。然后,您将其限制为返回第一个表中的记录,其中第二个表中的该员工ID没有更大的日期。享受!

小提琴:http://sqlfiddle.com/#!6/dd2b1/1