【问题标题】:SQL Delete duplicate rows with lowest numberSQL删除编号最小的重复行
【发布时间】:2013-03-22 11:22:21
【问题描述】:

我找不到合适的方法来删除 sql 表中编号最小的重复键。如果有相同编号的重复行,我需要删除其中一个。

例如

Key     Number  Description

11111   5   Desc1
11111   4   Desc2
22222   2   Desc1
22222   2   Desc2
33333   3   Desc1
33333   5   Desc2

这里我需要删除第 4 行小于第 5 行的第二行,第三行或第四行之一,以及第 3 行小于最后一行 5 的第五行。

【问题讨论】:

  • 这是哪个 RDBMS - MySQL、SQLServer、Oracle ...?
  • 是否还有另一列(如主键;-P)可以使用?在不知道您的 rdbms 的情况下,这会让事情变得更容易
  • 这是一个 SQLServer。不幸的是,我的表中没有主键。

标签: sql sql-server duplicate-removal


【解决方案1】:

查询以删除 SQL-Server 中的重复项:

;with c as
(
    select *, row_number() over(partition by [Key] order by Number desc) as n
    from YouTable
)
delete from c
where n > 1

【讨论】:

  • 哇!!!!我总是对我对 SQL 的了解程度以及我不知道的事情感到惊讶。它让我保持谦虚。
【解决方案2】:
DELETE FROM ztable dd
WHERE EXISTS (
  SELECT * FROM ztable ex
  WHERE ex.zkey = dd.zkey
  AND (ex.znumber > dd.znumber
       OR (ex.znumber = dd.znumber AND ex.description > dd.description)
       )
  );

注意:我将 key 和 number 重命名为 zkey 和 znumber 以避免与保留字/关键字混淆。 ztable 类似。

【讨论】:

    猜你喜欢
    • 2015-10-30
    • 2020-04-22
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 2017-06-29
    • 2014-02-07
    • 1970-01-01
    相关资源
    最近更新 更多