記錄一次驚心動魄的sql去重

jiuyang發表於2017-12-13
SELECT *,concat('update data_security_info set del_flag=1 where id = ''',id,''';') 

FROM data_security_info WHERE source = '360安全客' and del_flag = 0

and url in (SELECT url FROM data_security_info GROUP BY url HAVING COUNT(1)>1)

and id not in (SELECT MAX(id) FROM data_security_info GROUP BY url HAVING COUNT(1)>1)

url 為判重依據,保留最大id其他的資料狀態改為刪除狀態。

concat()函式,為字串拼接函式

從外到內分析sql 第一層四個條件界定,第一個是source渠道,第二個是未刪除狀態,第三個是依據url判重,第四個是除去id號最大的資料

第三個依據url判重:按照url劃分組group by url 判斷如果count>1則表示此url重複,抽取url

第四個除去max id 依據按照url判重,然後獲取到所有重複url的最大id號,然後not in這些最大id集合。

 

最後一步,執行concat的所有sql實現資料去重

2、保留最小id的資料

SELECT *,CONCAT('delete from distinct_table where id =',id,';') FROM distinct_table
WHERE id not in (select min(id) FROM distinct_table GROUP BY s_name,kechen,fenshu)

 

 



相關文章