pg数据库中重复数据如何快速保留一条
在 PostgreSQL 中删除重复数据但保留一条,可以使用窗口函数结合DELETE语句。
·
在 PostgreSQL 中删除重复数据但保留一条,可以使用 ROW_NUMBER() 窗口函数结合 DELETE 语句。以下是具体步骤:
1. 先确认要删除的重复数据(可选)
sql
SELECT *
FROM (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY fxgc_id ORDER BY id) AS rn
FROM periodic_check_result
WHERE status IS NULL
) AS sub
WHERE rn > 1;
2. 执行删除操作
sql
-- 使用 CTE 定位要删除的行
WITH duplicates AS (
SELECT id,
ROW_NUMBER() OVER (
PARTITION BY fxgc_id
ORDER BY id -- 按 id 排序,保留第一条(可调整排序规则)
) AS rn
FROM periodic_check_result
WHERE status IS NULL
)
DELETE FROM periodic_check_result
WHERE id IN (
SELECT id
FROM duplicates
WHERE rn > 1
);
关键点解释
-
ROW_NUMBER()
按fxgc_id分组,为每组内的重复数据生成行号(rn),行号从 1 开始递增。 -
PARTITION BY fxgc_id
表示按fxgc_id分组,每个fxgc_id单独计算行号。 -
ORDER BY id
按id排序(假设表中有自增主键id),最终保留每组中id最小的记录。
如果要保留最新记录,可改为ORDER BY id DESC。 -
WHERE status IS NULL
仅在status为空的记录中查找重复项。
更多推荐




所有评论(0)