sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo puedo borrar entradas duplicadas en una tabla de registros archivados?

Usa el CHECKSUM() función para ver si los datos son idénticos, sin verificar cada columna.

Suponga que tiene algo como esto:

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

Los datos de la segunda y la tercera fila están duplicados. Para limpiar los datos, ejecute esta instrucción:

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