如何从表中删除某些列(但不是全部)在postgresql中重复的行?

时间:2016-02-29 11:32:16

标签: sql postgresql

我读过以前的问题,但它们与我的不相似(example我没有唯一的标识符。)

说这是我的表格行:

  id     string       x    y    z    time_x                 
10318    'hello'   33700  5053  8  2015-07-03 12:39:49.61408
14071    'hello'   33700  5053  8  2015-07-03 12:39:49.61408

除了行的id之外,基本上所有内容都是相同的。 如何识别这些情况并删除冗余行?

注意:并非表中的所有行都是重复的。常规行应保持原样。

2 个答案:

答案 0 :(得分:5)

假设表名是tbl

Delete from tbl where id not in (select min(id) from tbl group by string, x, y, z)

答案 1 :(得分:0)

此查询使用窗口函数来查找重复的行。它留下了最小id的行:

delete from foo_table where id in (
    select dupid from (
        SELECT lead(id) over (partition by string, x, y, z, time_x order by id) dupid
        from foo_table
    ) A where dupid is not null 
);