Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment puis-je supprimer les entrées en double dans une table d'enregistrements archivés

Utilisez le CHECKSUM() fonction pour voir si les données sont identiques, sans vérifier chaque colonne.

Supposons que vous ayez quelque chose comme ceci :

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')

Les données des deuxième et troisième lignes sont des doublons. Pour nettoyer les données, exécutez cette instruction :

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