4,707 questions
Try this:
;WITH CTE_Duplicates AS (
SELECT [Id], [Id2], [Id3], [Id4], ROW_NUMBER() OVER(PARTITION BY [Id2], [Id3], [Id4] ORDER BY [CreatedOn] DESC) AS rn
FROM [dbo].[mytable]
)
DELETE CTE_Duplicates WHERE rn > 1;