【问题标题】:Delete duplicates MS-SQL with minimum date and multiple keys删除具有最小日期和多个键的重复 MS-SQL
【发布时间】:2023-03-18 20:17:02
【问题描述】:

我有一张大桌子,里面有这样的重复项:

  • number(主键),
  • group(主键),
  • Division(主键),
  • dateChange

例子:

1,2,3,20121015

1,2,3,20120101

1,2,3,20110101

2,2,2,20121010

2,2,2,20120101

结果应该是:

1,2,3,20121015

2,2,2,20121010

我尝试了很多组合,包括按主键分组,最小“changeDate” 但似乎没有什么能完美运行。

我想要这样的东西:

delete from table where (number,group.devision,changeDate) not in 
(select from table(number,group,devision,Max(changeDate)) 
group by (number,group.devision)

但我认为它不是有效的 MS-SQL 语法。

您的帮助将不胜感激!!

【问题讨论】:

    标签: sql-server duplicates sql-delete


    【解决方案1】:

    删除number, group, Division 组合中除最新的所有行。

    ;WITH cte
         AS (SELECT ROW_NUMBER() OVER (PARTITION BY number, group, Division 
                                           ORDER BY dateChange DESC) RN
             FROM   YourTable)
    DELETE FROM cte
    WHERE  RN > 1
    

    【讨论】:

      【解决方案2】:

      以下应该可以工作。

      delete table from
      table inner join (select 
      number, group, division, changeDate, row_number() over 
      (partition by number, group, division order by changeDate desc) as ranker
      from table) Z
      on table.number  = Z.number and table.group = Z.group and 
      table.changeDate = Z.changeDate and Z.ranker != 1
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-07-11
        • 1970-01-01
        • 2019-06-04
        • 1970-01-01
        • 1970-01-01
        • 2012-01-16
        • 2022-01-04
        • 1970-01-01
        相关资源
        最近更新 更多