2011-05-26 172 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)平均最高的行,然後刪除所有其他行。