I have a SQLite DB where the statement:
SELECT messdatum, count(*) as anzahl
from lipo
GROUP BY Messdatum
ORDER BY anzahl desc;
results
I got the solution:
INSERT into holdkey SELECT messdatum, count(*) as anzahl,NameISO from lipo group by messdatum having count(*) > 1;
INSERT into holddups SELECT DISTINCT lipo.*,1 from lipo, holdkey where lipo.Messdatum = holdkey.messdatum group by messdatum;
INSERT into lipo_mit_dz SELECT *, count(*) as DublettenZahl from lipo group by messdatum ORDER BY Dublettenzahl desc ;
DELETE from lipo_mit_dz where Dublettenzahl > 1;
INSERT into lipo_mit_dz SELECT * from holddups ;
SQLite has a special column, ROWID created on every table by default (you can switch it off using the WITHOUT ROWID
modifier, but be very sure before doing so).
This means that we can identify specific rows within sets of duplicates, for example, finding the first entry for a value:
SELECT messdatum, MIN(ROWID) FROM lipo
So one way to remove duplicates might be this:
DELETE FROM lipo
WHERE rowid NOT IN (
SELECT MIN(rowid)
FROM lipo
GROUP BY messdatum
)