sql - 在 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
有什么帮助吗?
解决方案
我认为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
);
推荐阅读
- php - 错误的值插入到 oauth_access_token 表中
- vb.net - 在一个命令中打开多个“Form2”
- python-3.x - Jupyter 实验室只在私有 ip 上打开,而不是在公共 ip 上打开
- mysql - “如何连接两个数组的数据并插入mysql数据库?”
- css - 响应式网站应该有的最大断点是多少?
- kubernetes - Kubernetes 中哪些卷类型最适合存储主机配置?
- docker - Nginx 保留代理 https 和 http 连接错误
- odbc - AS/400 DDM 服务未运行
- p2p - 是否可以在不知道文件哈希的情况下获取文件
- javascript - UTC 实时时钟,不适用于负时区