我有一个如下数据库
Col1 Col2
------------
0010 1111 (Delete this row)
0011 1112
0012 1111 (Keep this row)
我需要删除基于Col1在Col2中找到的重复数据行。我需要保留较旧的条目并删除较年轻的条目。在此示例中,我需要删除0010并保留0012。
到目前为止,我有这段代码,向我显示了Col2中的重复项,并显示了Col1中的唯一编号
Select *
From [database]
Where (Col2) in (
Select Col2
From [database]
Group by Col2
Having Count(*) > 1
)
我并没有为下一步选择正确的Col1编号而烦恼,因此可以删除该行。
最佳答案
Declare @YourTable table (col1 varchar(25),col2 varchar(25))
Insert Into @YourTable values
('0010','1111'),
('0011','1112'),
('0012','1111')
;with cteBase as (
Select *,RowNr=Row_Number() over (Partition By Col2 Order By Col1 Desc) from @YourTable
)
Select * From cteBase where RowNr>1
-- Delete From cteBase where RowNr>1
-- Remove Select if satisfied with results
要删除的记录
col1 col2 RowNr
0010 1111 2