删除重复的行(不要删除所有重复的)

我正在使用postgres。 我想删除重复的行。 条件是,从一组重复行中的1个副本不会被删除。

即:如果有5个重复logging,则其中4个将被删除。

尝试本文中描述的步骤: 从PostgreSQL数据库中删除重复项 。

它描述了一个情况,当你必须处理大量的数据,这是不可能的group by

一个简单的解决scheme是这样的:

 DELETE FROM foo WHERE id NOT IN (SELECT min(id) --or max(id) FROM foo GROUP BY hash) 

hash是重复的东西。

 delete from table where not id in (select max(id) from table group by [duplicate row]) 

这是随机(最大值)select哪一行你需要保持。 如果你有这个细节,请提供更多细节

最快的是join到同一张表中。 http://www.postgresql.org/docs/8.1/interactive/sql-delete.html

 CREATE TABLE test(id INT,id2 INT); CREATE TABLE mapy=# INSERT INTO test VALUES(1,2); INSERT 0 1 mapy=# INSERT INTO test VALUES(1,3); INSERT 0 1 mapy=# INSERT INTO test VALUES(1,4); INSERT 0 1 DELETE FROM test t1 USING test t2 WHERE t1.id=t2.id AND t1.id2<t2.id2; DELETE 2 mapy=# SELECT * FROM test; id | id2 ----+----- 1 | 4 (1 row)