删除重复数据
来自 PostgreSQL Wiki
跳转到导航跳转到搜索
IRC 中一个常见的问题是如何删除在一组列上重复的行,只保留具有最低 ID 的行。
此查询适用于所有具有相同 column1、column2 和 column3 的 tablename 行。
DELETE FROM tablename
WHERE id IN (
SELECT
id
FROM (
SELECT
id,
row_number() OVER w as rnum
FROM tablename
WINDOW w AS (
PARTITION BY column1, column2, column3
ORDER BY id
)
) t
WHERE t.rnum > 1);
有时会使用 timestamptz 字段代替 ID 字段。