在數據庫中有一批數據,但是由於數據入庫之前某些不當的操作引入了一些重復的數據,需要將這些重復的數據刪除。數據的結構大概是下面的樣子
CREATE TABLE [dbo].[aaa](
[id] [int] IDENTITY(1,1) NOT NULL,
[fileName] [varchar](50) NULL,
[fileSize] [int] NULL,
CONSTRAINT [PK_aaa] PRIMARY KEY CLUSTERED
(
[id] ASC
)
)
其中fileName和FileSize重復的時候表示數據重復
按照fileName和fileSize進行分組
select fileSize,fileName from tb group by filesize,filename
找出最大的那條記錄的id
上面的語句變成
select fileSize,fileName ,max(id) from tb group by filesize,filename
查找所有的id
select id from
(select fileSize,fileName ,max(id) id from tb group by filesize,filename ) a
刪除重復的數據
delete from tb where id not in (
select id from
(select fileSize,fileName ,max(id) id from tb group by filesize,filename ) a
)
現在完成了重復數據的刪除,主要是利用了找出某個分組中最大的那個id,其中包括了所有不重復的id,然后使用not in將需要保留的排除。
