>>>>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) >>
>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 >This is pretty straight forward. Thank you for the explanation. Of course I will back up the customer table first, before deleting.