我想删除在某些列中基于相同值的被视为重复的记录,并在下面的示例中保留一个基于InsertedDate的最新记录。我想要一个不使用游标而是基于设置的解决方案。目标:删除所有重复项并保持最新。
下面的ddl创建了一些重复项。需要删除的记录为:John1和John2,因为它们具有与John3相同的ID,而John3是最新的记录。
另外,需要删除记录John5,因为还有另一条ID = 3且较新的记录(John6)。
Create table dbo.TestTable (ID int, InsertedDate DateTime, Name varchar(50))
Insert into dbo.TestTable Select 1, '07/01/2009', 'John1'
Insert into dbo.TestTable Select 1, '07/02/2009', 'John2'
Insert into dbo.TestTable Select 1, '07/03/2009', 'John3'
Insert into dbo.TestTable Select 2, '07/03/2009', 'John4'
Insert into dbo.TestTable Select 3, '07/05/2009', 'John5'
Insert into dbo.TestTable Select 3, '07/06/2009', 'John6'
最佳答案
这有效:
delete t
from TestTable t
left join
(
select id, InsertedDate = max(InsertedDate) from TestTable
group by id
) as sub on sub.id = t.id and sub.InsertedDate = t.InsertedDate
where sub.id is null
如果您必须处理领带,那会有些棘手。