我想删除在某些列中基于相同值的被视为重复的记录,并在下面的示例中保留一个基于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
如果您必须处理领带,那会有些棘手。