Sqlite

SQLite - 刪除多列中的重複項

  • February 13, 2020

我有下表:

C1 | C2 | C3
-------------
A | X | 1
A | Y | 2
B | X | 3
B | Y | 4

我想對第 1 列和第 2 列進行重複數據刪除,並從第 3 列中選擇最大值。如果第 1 行和第 2 行在第 1 列中都有“A”,那麼它們是重複的。由於第 3 行和第 4 行在第 1 列中都有“B”,因此它們是重複的。由於第 1 行和第 3 行在第 2 列中都有“X”,因此它們是重複的。最後,由於第 2 行和第 4 行在第 2 列中都有“Y”,因此它們是重複的。因此,前四行將被視為重複,結果應返回第 4 行,因為它包含第 3 列中的最大值。我無法弄清楚如何跨多列進行重複數據刪除。任何意見,將不勝感激。

WITH RECURSIVE cte AS 
( SELECT c1, c2, c3, 1 level
 FROM test
UNION ALL
 SELECT cte.c1, t2.c2, GREATEST(cte.c3, t2.c3), level+1
 FROM cte
 JOIN test t1 ON cte.c2 = t1.c2
 JOIN test t2 ON t1.c1 = t2.c1
 WHERE t2.c3 != cte.c3
   AND level < ( SELECT MAX(c3)
                 FROM test )
UNION ALL
 SELECT t2.c1, cte.c2, GREATEST(cte.c3, t2.c3), level+1
 FROM cte
 JOIN test t1 ON cte.c1 = t1.c1
 JOIN test t2 ON t1.c2 = t2.c2
 WHERE t2.c3 != cte.c3
   AND level < ( SELECT MAX(c3)
                 FROM test )
)
SELECT cte.c1, cte.c2, MAX(cte.c3) c3
FROM cte
JOIN test ON (cte.c1, cte.c2) = (test.c1, test.c2)
GROUP BY c1, c2
HAVING c3 = MAX(test.c3);

小提琴

引用自:https://dba.stackexchange.com/questions/259540