我想删除在某些列中基于相同值的被视为重复的记录,并在下面的示例中保留一个基于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

如果您必须处理领带,那会有些棘手。

09-26 04:00