【问题标题】:Delete rows with duplicates on two fields删除两个字段上重复的行
【发布时间】:2014-04-07 21:38:10
【问题描述】:

我需要删除这个表的重复值:

+----+-------+-------------+---------+
| id | name  | description | surname |
+----+-------+-------------+---------+
| 1  | Peter | Member      | Hitsh   |
| 2  | James | Member      | Tach    |
| 3  | Mary  | Member      | Popims  |
| 4  | Peter | Member      | Hitsh   |
+----+-------+-------------+---------+

我想删除所有具有相同namesurname 的重复值。

【问题讨论】:

  • 所以您的意思是为每组重复项保留 1 行?哪一个?

标签: sql database postgresql sql-delete duplicate-data


【解决方案1】:

(name, surname) 上的每组重复项保留具有最小id 的行:

DELETE FROM tbl
USING (
   SELECT id, row_number OVER (PARTITION BY name, surname ORDER BY id) As rn
   FROM   tbl
   ) del
WHERE  tbl.id = del.id
AND    del.rn > 1;

假设 id 是唯一的。

今天非常相似的问题:
Delete all rows but one with the greatest value per group

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-31
    • 2020-02-12
    • 1970-01-01
    • 1970-01-01
    • 2022-11-21
    • 1970-01-01
    • 2016-02-21
    相关资源
    最近更新 更多