下午的時候遇到點問題,Sql去重,簡單的去重能夠用 DISTINCT 關鍵字去重,不過,不少狀況下用這個解決不了問題。重複的數據變幻無窮,例如:相似於qq、微信的最近聯繫人功能,讀取這些數據確定要和消息表關聯,那樣關聯的數據會出現不少重複的,只是消息和時間不同。最終的決定條件是最後一次發消息的時間。那麼問題來了,如何作呢sql
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去作的例子:spa
a.根據某一列查詢重複數據Sql以下:code
select * from A where Id in (select Id from A group by Id having count(Id) > 1)
根據多個列查詢重複數據Sql以下:blog
select * from A a where (a.Id,a.gender) in (select Id,gender from A group by Id,gender having count(*) > 1)