Tuesday, November 30, 2010

Duplicate removal query

DECLARE @table TABLE (
id INT IDENTITY(1, 1)
, data VARCHAR(20)
)
INSERT INTO @table VALUES ('not duplicate row')
INSERT INTO @table VALUES ('duplicate row')
INSERT INTO @table VALUES ('duplicate row')
INSERT INTO @table VALUES ('second duplicate row')
INSERT INTO @table VALUES ('second duplicate row')


DELETE FROM @table
FROM @table o
INNER JOIN ( SELECT data
FROM @table
GROUP BY data
HAVING COUNT(*) > 1
) f ON o.data = f.data
LEFT OUTER JOIN ( SELECT [id] = MAX(id)
FROM @table
GROUP BY data
HAVING COUNT(*) > 1
) g ON o.id = g.id
WHERE g.id IS NULL