2011-05-26 136 views
0

我是SQLite的新手,我想找到一个解决方案来删除基于特定条件的重复条目。 假设我有一个像这样的表:SQLite:删除重复的条目

ID | Person1 | ID1 | Person2 | ID2 | Average 
------------------------------------------- 
1 | Name1 | 1 | Name4 | 4 | 47 
2 | Name1 | 1 | Name5 | 5 | 88 
3 | Name1 | 1 | Name6 | 6 | 15 
---------------------------------------- 
4 | Name2 | 2 | Name4 | 4 | 90 
5 | Name2 | 2 | Name5 | 5 | 80 
6 | Name2 | 2 | Name6 | 6 | 45 
---------------------------------------- 
7 | Name3 | 3 | Name4 | 4 | 30 
8 | Name3 | 3 | Name5 | 5 | 20 
9 | Name3 | 3 | Name6 | 6 | 79 

,并希望像这样的表:

ID | Person1 | ID1 | Person2 | ID2 | Average 
------------------------------------------- 
2 | Name1 | 1 | Name5 | 5 | 88 
5 | Name2 | 2 | Name4 | 4 | 90 
9 | Name3 | 3 | Name6 | 6 | 79 

反正有这样做的? 在此先感谢。

+1

那张数据表对我来说绝对没有意义。 每行是db记录吗?如果是这种情况,那么没有重复的行。有些可能类似。 – conor 2011-05-26 10:06:21

+0

是否要求平均值列中的最高值不被删除? – 2011-05-26 23:00:09

+0

可能重复[删除SQLite中的重复项](http://stackoverflow.com/questions/5563289/delete-duplicates-entries-in-sqlite) – Rob 2012-08-11 04:46:41

回答

2

这工作:

DELETE FROM tablename 
WHERE ID NOT IN (
    SELECT T.ID 
    FROM (
     SELECT ID1, MAX(Average) AS MAverage 
     FROM TableName 
     GROUP BY ID1 
    ) AS X 
    INNER JOIN TableName T 
     ON X.ID1 = T.ID1 AND X.MAverage = T.Average 
); 

这个查询查找与每人(基于ID1)平均最高的行,然后删除所有其他行。