sql-server - SQL 服务器 2016 : How to remove records that are NOT duplicates but have duplicate values?

标签 sql-server duplicates

我是新来的,对 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/

相关文章:

sql-server - 从 SYSDATETIMEOFFSET() 获取 OffSet 部分

sql-server - SQL 服务器 : How should I structure my index to improve lookup time?

datetime - 如何根据索引列执行pandas drop_duplicates

java - 浏览多个列表以查找相等的对象

sql - 如何使用 row_number 和分区依据查找重复值

c# - 始终将 DBNull SqlParameter 输入为 int 是否安全?

sql - 如何从 SQL Server 2014 中的指定行获取指定数量的先前行?

sql - 为没有循环的表生成 guid

根据另一个变量的值删除重复行

.net - 防止插入重复元素的集合是否工作得更慢?