I need to delete some rows that have the same column combination (except ID). The row that should be kept is the one that has the maximum reference date
x
ID Column1 Column2 RefDate
GUID1 34578 BRKNRI 2018-05-03
GUID2 34578 BRKNRI 2018-05-02
GUID3 12381 BRSAPR 2018-05-03
GUID4 12381 BRSAPR 2018-05-02
GUID5 12381 BRSAPR 2018-05-01
So, after the query the table should be like this
ID Column1 Column2 RefDate
GUID1 34578 BRKNRI 2018-05-03
GUID3 12381 BRSAPR 2018-05-03
I know that the query below will return the table I want, but I don’t know how to delete the “duplicate” entries and leave only the one with the maximum date.
SELECT Column1,
Column2,
max(RefDate) as MaxDate
FROM Table
GROUP BY Column1, Column2)
Advertisement
Answer
You can try to use delete JOIN
DELETE t1
FROM [Table] t1
INNER JOIN (
SELECT Column1,
Column2,
max(RefDate) as MaxDate
FROM [Table]
GROUP BY Column1, Column2
) t2
ON t1.Column1 = t2.Column1
AND t1.Column2 = t2.Column2
AND t1.RefDate <> t2.MaxDate
or use EXISTS
subquery.
DELETE t1
FROM [Table] t1
WHERE EXISTS (
SELECT 1
FROM [Table] t2
WHERE t1.Column1 = t2.Column1
AND t1.Column2 = t2.Column2
HAVING max(t2.RefDate) <> t1.RefDate
)