oracle 查重及處理(可保存最舊或最新數據)

查詢所有重複數據的結果

SELECT ID,DWMC,ADD_TIME 
FROM 表名
WHERE DWMC IN (SELECT DWMC FROM 表名 GROUP BY DWMC HAVING COUNT(DWMC) > 1) 

 

查詢重複數據只保存,除了首條的結果

 

SELECT ID,DWMC,ADD_TIME 
FROM 表名
WHERE DWMC IN (SELECT DWMC FROM 表名 GROUP BY DWMC HAVING COUNT(DWMC) > 1) 
AND  ADD_TIME NOT IN (
    SELECT MIN(ADD_TIME) FROM 表名 WHERE DWMC IN (SELECT DWMC FROM 表名 GROUP BY DWMC HAVING COUNT(DWMC) > 1) GROUP BY DWMC
)

要保留最後一條的話,把MIN 改成MAX

刪除重複數據,僅保存首條

 

delete from 表名 where id in (
    SELECT ID,DWMC,ADD_TIME 
    FROM 表名 
    WHERE DWMC IN (SELECT DWMC FROM 表名 GROUP BY DWMC HAVING COUNT(DWMC) > 1) 
    AND  ADD_TIME NOT IN (
        SELECT MIN(ADD_TIME) FROM 表名 WHERE DWMC IN (SELECT DWMC FROM 表名 GROUP BY DWMC HAVING   COUNT(DWMC) > 1) GROUP BY DWMC
    )
)

打上重複標籤

update 表名 set DWMC=concat(DWMC,'(重複)') where id in (
    SELECT ID
    FROM 表名 
    WHERE DWMC IN (SELECT DWMC FROM 表名 GROUP BY DWMC HAVING COUNT(DWMC) > 1) 
    AND  ADD_TIME NOT IN (
        SELECT MIN(ADD_TIME) FROM 表名  WHERE DWMC IN (SELECT DWMC FROM 表名 GROUP BY DWMC HAVING COUNT(DWMC) > 1) GROUP BY DWMC
    ) 
) AND DWMC NOT LIKE '%(重複)%' 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章