テーブルで重複するエントリを削除する検索を行っていたところ、次のような例が見つかりました。
CREATE TABLE Suppliers
(
Id int identity (1,1),
CompanyTitle nvarchar(1000),
ContactName nvarchar(100),
LastContactDate datetime
)
INSERT Suppliers VALUES (N'Melody Music Instruments',N'James Manning', '20090623 10:15')
INSERT Suppliers VALUES (N'Blue Jazz',N'Mike Clark', '20090720 15:40')
INSERT Suppliers VALUES (N'Top Music',N'Katy Swan', '20090827 18:00')
INSERT Suppliers VALUES (N'Blue Jazz',N'Mike Clark', '20090806 10:00')
INSERT Suppliers VALUES (N'Melody Music Instruments',N'James Brown', '20080121 11:20')
INSERT Suppliers VALUES (N'Top Music',N'Katy Perry', '20090825 14:00')
INSERT Suppliers VALUES (N'Top Music',N'Katy Perry', '20090825 14:00')
WITH Duplicate AS
(
SELECT
RN = ROW_NUMBER() OVER (PARTITION BY CompanyTitle ORDER BY LastContactDate DESC)
FROM Suppliers
)
delete from Duplicate where RN > 1
CTE は次のようなものを返し、値が 1 より大きい場合は削除します。
RN
--
1
2
1
2
1
2
3
私が理解できなかったのは、どのエントリが削除されるかを理解する方法です。この例では、重複するエントリ数を返すだけです。