首页 > 解决方案 > 在 SQL 中删除单个重复行

问题描述

下图是我的表格的示例。我有重复的行,但有一个独特的功能date_scanned。我想要做的是通过指定删除单行id,但是当我这样做时,所有具有该 ID 的行都将被删除,并且 postgres 不允许您在 DELETE 后使用 LIMIT。

以下内容在我删除时有效WHERE id = 'F284',但会删除 rn =1 的任何行。我需要指定行 ID

DELETE FROM allergen_list WHERE date_scanned IN(
WITH cte AS (
    SELECT date_scanned, row_number() OVER(PARTITION BY id, lot, expiration_date ORDER BY date_scanned DESC) as rn
FROM allergen_list WHERE id = 'F284'
)
SELECT date_scanned FROM cte WHERE rn = 1;

https://i.stack.imgur.com/Zf18E.png

有什么帮助吗?

标签: sqlpostgresql

解决方案


我认为Caius的方法是正确的。但是,逻辑似乎是:

DELETE FROM allergen_list al
WHERE al.id = 'F284' AND
      al.date_scanned < (SELECT MAX(al2.date_scanned)
                         FROM allergen_list al2
                         WHERE al2.id = al.id and al2.lot = al.lot and al2.expiration_date = al.expiration_date
                        );

推荐阅读