我是新来的,对 SQL 比较陌生。我有一个类似这样的表:
[Pk], [Case_No], [Status], [Open_Date], [Close_Date], [Case_Age], [Report_Date]
每周,所有案例,无论是打开的还是关闭的,都会被转储到表格中,并附上新的报告日期。我想要做的是能够删除已经关闭的重复出现的记录。我想保留案件被报告为已结案的第一个实例,但我不需要重复的案件(除非案件仍在审理中。)我希望这是因为……这是漫长的一天。我已经有了一个解决方案,但我需要清理历史记录才能正确报告。
如果我能弄清楚如何添加标志或其他东西...我已经尝试过 Dense_Rank()
,但我不想对空的结束日期进行排名...
我已经在谷歌上搜索了好几天的想法,现在我正在向专家寻求建议。任何帮助是极大的赞赏!提前致谢!
最佳答案
使用 common table expression (cte)和 row_number()
:
with cte as (
select *
, rn = row_number() over (
partition by Case_No, [Status]
order by Report_Date asc
)
from t
where [Status] = 'Closed'
)
select *
from cte
where rn > 1
要删除它们,只需将 select *
更改为 delete
。
关于sql-server - SQL 服务器 2016 : How to remove records that are NOT duplicates but have duplicate values?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44011862/