Sql去重一些技巧


下午的時候遇到點問題,Sql去重,簡單的去重可以用 DISTINCT 關鍵字去重,不過,很多情況下用這個解決不了問題。重復的數據千變萬化,例如:類似於qq、微信的最近聯系人功能,讀取這些數據肯定要和消息表關聯,那樣關聯的數據會出現很多重復的,只是消息和時間不一樣。最終的決定條件是最后一次發消息的時間。那么問題來了,如何做呢

SELECT colName FROM  ( SELECT MAX(cloName1),cloName2..... FROM tableName(關聯表) GROUP BY colName ) t ORDER BY t.colName

 這句sql語句只能過濾數字類型和時間,對於其他的去重條件還是不夠的,可以用ROW_NUMBER()來做,Sql如下:

SELECT t.Id,
       t.PCName,
       t.rowid
FROM
(
    SELECT Id,
           PCName,
           ROW_NUMBER() OVER (PARTITION BY PCName ORDER BY Id) AS rowid
    FROM dbo.PC
) AS t
WHERE t.rowid = 1;

下面是根據having去做的例子:

   a.根據某一列查詢重復數據Sql如下:

select * from A
where Id in (select Id from A group by Id having count(Id) > 1)

根據多個列查詢重復數據Sql如下:

select * from A a
where (a.Id,a.gender) in (select Id,gender from A group by Id,gender having count(*) > 1)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM