Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie kann ich doppelte Einträge in einer Tabelle mit archivierten Datensätzen löschen?

Verwenden Sie die CHECKSUM() Funktion, um zu sehen, ob die Daten identisch sind, ohne jede einzelne Spalte zu prüfen.

Angenommen, Sie haben so etwas:

create table #t (log_id int, c varchar(10), d int, log_date date)

insert #t values
(1, 'aaaaa', 1, '20140101'),
(1, 'aaaaa', 1, '20140102'),
(1, 'aaaaa', 1, '20140103'),
(1, 'bbbbb', 1, '20140104'),
(2, 'ccc', 10, '20140103'),
(2, 'cdd', 10, '20140105')

Die Daten in der zweiten und dritten Zeile sind Duplikate. Um die Daten zu bereinigen, führen Sie diese Anweisung aus:

with x as (
select *, row_number() over(partition by log_id, checksum(log_id, c, d) order by log_date) as rn
from #t
)
delete x where rn > 1