【发布时间】:2018-08-19 10:58:11
【问题描述】:
我有一个包含以下列的“投票”表:
voter, election_year, election_type, party
我需要删除 voter 和 election_year 组合的所有重复行,但我无法弄清楚如何执行此操作。
我运行了以下内容:
WITH CTE AS(
SELECT voter,
election_year,
ROW_NUMBER()OVER(PARTITION BY voter, election_year ORDER BY voter) as RN
FROM votes
)
DELETE
FROM CTE where RN>1
基于另一个 StackOverflow 答案,但似乎这是特定于 SQL Server 的。我已经看到了使用唯一 ID 来做到这一点的方法,但是这个特殊的表没有那么奢侈。如何采用上述脚本来删除我需要的重复项?谢谢!
编辑:根据请求,使用一些示例数据创建表:
CREATE TABLE public.votes
(
voter varchar(10),
election_year smallint,
election_type varchar(2),
party varchar(3)
);
INSERT INTO votes
(voter, election_year, election_type, party)
VALUES
('2435871347', 2018, 'PO', 'EV'),
('2435871347', 2018, 'RU', 'EV'),
('2435871347', 2018, 'GE', 'EV'),
('2435871347', 2016, 'PO', 'EV'),
('2435871347', 2016, 'GE', 'EV'),
('10215121/8', 2016, 'GE', 'ED')
;
【问题讨论】:
-
“基于另一个 StackOverflow 答案,但似乎这是特定于 SQL Server 的。”这个查询在我看来是完美的 PostgreSQL 语法。 PostgreSQL 还支持
WITH .. AS(公用表表达式)和ROW_NUMBER() OVER (....)就好了。“我怎样才能采用上面的脚本来删除我需要的重复项?谢谢!”没有表结构和示例数据很难说。检查stackoverflow.com/help/how-to-ask部分“帮助他人重现问题” -
抱歉,给出的错误是“[42P01] 错误:关系“cte”不存在位置:157”
标签: sql postgresql