sql-server - SQL Server 删除重复项
问题描述
我有一张表格,可以跟踪员工以及他们在政策中度过的天数。我不生成这些数据,它被转储到我们的服务器日报。
该表如下所示:
我的目标是通过仅保留最近的日期来消除重复项。在此示例中,如果我运行查询,我希望它为 Nicholas Morris 保留第 11 行,为 Tiana Sullivan 保留第 14 行。
假设:名字和姓氏组合是唯一的
到目前为止,这就是我一直在做的事情:
select *
from
Employees IN(
Select ID
from Employees
group by FirstName, lastName
Having count(*) > 1)
这会将重复的行返回给我,我必须手动搜索它们并删除我不想保留的行。
我相信有更好的方法可以做到这一点感谢您的帮助
解决方案
您可以使用 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
推荐阅读
- javascript - JavaScript:使用 lodash 在相同的嵌套键之间进行过滤
- java - appium 中的滚动功能以识别列表框/下拉列表中的特定对象
- webhooks - Microsoft Teams 传入 Webhook 无法与 BambooHR Webhook 一起使用
- waf - 将多个文件设置为单个任务生成器生成的源输入
- python - PySpark 2.4 未启动
- ios - 如何在视图中对角线显示渐变
- windows - 如何在 NVIDIA P100 上启用 WDDM?
- r - 在 R 中跨表删除相同的列
- c++ - QT creator 不更新 .ui 文件和设计器
- javascript - 当我按下按钮时,JSON 文件不显示