首页 > 解决方案 > SQL Server 删除重复项

问题描述

我有一张表格,可以跟踪员工以及他们在政策中度过的天数。我不生成这些数据,它被转储到我们的服务器日报。

该表如下所示:

雇员

我的目标是通过仅保留最近的日期来消除重复项。在此示例中,如果我运行查询,我希望它为 Nicholas Morris 保留第 11 行,为 Tiana Sullivan 保留第 14 行。

假设:名字和姓氏组合是唯一的

到目前为止,这就是我一直在做的事情:

select *
from 
Employees IN(
    Select ID
    from Employees
    group by FirstName, lastName
    Having count(*) > 1)

这会将重复的行返回给我,我必须手动搜索它们并删除我不想保留的行。

我相信有更好的方法可以做到这一点感谢您的帮助

标签: sql-server

解决方案


您可以使用 CTE 和 ROW_NUMBER() 函数来执行此操作。

获取数据的查询是:

SELECT ID, FirstName, LastName, ROW_NUMBER() 
     OVER (PARTITION BY FirstName, LastName ORDER BY DaysInPolicy DESC) AS Identifier
FROM 
   Employees

删除重复项的查询是:

;WITH CTE AS (
     SELECT ID, ROW_NUMBER() 
     OVER (PARTITION BY FirstName, LastName ORDER BY DaysInPolicy DESC) AS Identifier
FROM 
   Employees
)
DELETE E
FROM 
   Employees E
   INNER JOIN CTE C ON C.ID = E.ID
WHERE 
   C.Identifier > 1

推荐阅读