Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como posso limpar entradas duplicadas em uma tabela de registros arquivados


Use o CHECKSUM() função para ver se os dados são idênticos, sem verificar cada coluna.

Suponha que você tenha algo assim:
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')

Os dados na segunda e na terceira linha são duplicados. Para limpar os dados, execute esta instrução:
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