前提:相同的數據重復往數據庫寫入,導致存在僅主鍵Id不同的重復數據,現在需要去除重復數據,僅保留重復數據中Id最大的一條
思路:
1、找出存在重復數據的記錄,並取重復數據中最大的Id值
2、刪除記錄中不包含最大Id值的記錄
注意:該SQL會刪除沒有重復數據的記錄
實現:
DELETE FROM [Log_IIS].[dbo].[IISLog_table]
WHERE id not in
(select MAX(Id) from [IISLog_table] group by [RequestTime]
,[LogFilename]
,[LogRow]
,[date]
,[time]
,[cIp]
,[csUsername]
,[sSitename]
,[sComputername]
,[sIp]
,[sPort]
,[csMethod]
,[csUriStem]
,[csUriQuery]
,[scStatus]
,[scSubstatus]
,[scWin32Status]
,[scBytes]
,[csBytes]
,[timeTaken]
,[csVersion]
,[csHost]
,[csUserAgent]
,[csCookie]
,[csReferer]
,[sEvent]
,[sProcessType]
,[sUserTime]
,[sKernelTime]
,[sPageFaults]
,[sTotalProcs]
,[sActiveProcs]
,[sStoppedProcs] having count(*) > 1)
下面代碼通過循環方式刪除重復行,不會影響到沒有重復行的記錄
DECLARE @Count INT select @Count=COUNT(UserID) from UserBankCardInfo group by UserID having count(*) > 1 PRINT @Count WHILE(@Count>1) BEGIN DELETE FROM UserBankCardInfo WHERE id in ( select MAX(Id) id from UserBankCardInfo group by UserID having count(*) > 1 ) SET @Count=@Count-1 END