【问题标题】:Delete Duplicate Records with condition删除有条件的重复记录
【发布时间】:2015-11-18 15:39:53
【问题描述】:

下面是我的数据表结构:

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 有 3 条记录。 013有4条记录。我正在寻找一个查询来返回每个员工的最大日期记录。在这种情况下,结果应该如下:

ID    Date                        EmpId

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

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

【问题讨论】:

    标签: sql sql-server tsql


    【解决方案1】:
    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
    

    【讨论】:

      【解决方案2】:
      DELETE FROM (select ID 
                          ,Date
                          , EMPId
                          , ROW_NUMBER() over (partition by EMPId order by Date desc) as RowNum 
                          from Employee) WHERE RowNum > 1
      

      以上查询将删除所有重复的empid(旧的)。

      【讨论】:

        【解决方案3】:

        这个查询对我有用:

        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 连接将表连接到自身。然后,您将其限制为返回第一个表中的记录,其中第二个表中该员工 ID 没有更大的日期。享受吧!

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

        【讨论】:

          【解决方案4】:

          试试这个

          WITH TempId
          AS (
            SELECT *, 
               row_number() OVER(PARTITION BY EmpID ORDER BY ID desc) AS [Num]
            FROM Employee1
          )
          DELETE TempId WHERE [Num] > 1  --For deleting record
          
          Select * from Employee1   --For Selecting record
          

          在 Fiddle http://sqlfiddle.com/#!6/80f3d/3 中寻找解决方案

          【讨论】:

            猜你喜欢
            • 2011-08-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-02-17
            • 2019-04-04
            • 2012-01-06
            • 1970-01-01
            相关资源
            最近更新 更多