>>>FIELD1 FIELD2 >>>1 Entry ABC >>>1 Entry ABC >>>2 Entry 123 >>>2 Entry 123 >>>>>>
>>DECLARE @TEst TABLE (FIELD1 int, FIELD2 char(10)) >>INSERT INTO @Test VALUES (1,'Entry ABC') >>INSERT INTO @Test VALUES (1,'Entry ABC') >>INSERT INTO @Test VALUES (2,'Entry 123') >>INSERT INTO @Test VALUES (2,'Entry 123') >> >>;with cteTest >>AS >>( >>SELECT *, ROW_NUMBER() OVER (PARTITION BY Field1, Field1 ORDER BY Field1, Field1) AS R_C >>FROM @TEst Test >>) >> >>DELETE FROM cteTest WHERE R_C > 1 >> >>SELECT * FROM @TEst >>>
(PARTITION BY Field1, Field2 ORDER BY Field1, Field2)So if you have 3 or more they all should be here:
(PARTITION BY Field1, Field2, Field3...)And you should define what records must be deleted
(PARTITION BY Field1, Field2 ORDER BY SomeOtherFIeldIfYouWant)This example define duplicate records by Field1 and FIeld2 and leave
DECLARE @TEst TABLE (FIELD1 int, FIELD2 char(10), Field3 DATETIME) INSERT INTO @Test VALUES (1,'Entry ABC', GETDATE()) waitfor delay '00:00:01' INSERT INTO @Test VALUES (1,'Entry ABC', GETDATE()) waitfor delay '00:00:01' INSERT INTO @Test VALUES (2,'Entry 123', GETDATE()) waitfor delay '00:00:01' INSERT INTO @Test VALUES (2,'Entry 123', GETDATE()) SELECT * FROM @TEst ;with cteTest AS ( SELECT *, ROW_NUMBER() OVER (PARTITION BY Field1, Field1 ORDER BY Field3) AS R_C FROM @TEst Test ) DELETE FROM cteTest WHERE R_C > 1 SELECT * FROM @TEst