【问题标题】:SQL Server 2016: How to remove records that are NOT duplicates but have duplicate values?SQL Server 2016:如何删除不重复但具有重复值的记录?
【发布时间】:2017-10-16 03:35:04
【问题描述】:

我是新来的,对 SQL 比较陌生。我有一个类似这样的表:

[Pk], [Case_No], [Status], [Open_Date], [Close_Date], [Case_Age], [Report_Date]

每周,所有打开或关闭的案例都会以新的报告日期转储到表格中。我想要做的是能够删除已经关闭的重复发生的记录。我想保留第一个案件被报告为已结案的案件,但我不需要重复的案件(除非案件仍然开放。)我希望这是因为......这是漫长的一天。我已经有了一个解决方案,但我需要清理历史记录才能正确报告。

如果我能弄清楚如何添加标志或其他东西...我已经尝试过Dense_Rank(),但我不希望空结束日期排名...

我已经在谷歌上搜索了几天的想法,现在我正在向专家寻求建议。任何帮助是极大的赞赏!提前致谢!

【问题讨论】:

    标签: sql-server duplicates


    【解决方案1】:

    使用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

    【讨论】:

    • 这很完美!谢谢!你让我很开心!
    • @niki0625 乐于助人!
    猜你喜欢
    • 1970-01-01
    • 2011-03-20
    • 1970-01-01
    • 2016-01-07
    • 2020-03-31
    • 1970-01-01
    • 2013-04-23
    • 1970-01-01
    • 2019-10-05
    相关资源
    最近更新 更多