sql >> Database >  >> RDS >> Mysql

Hoe kan ik dubbele vermeldingen in een tabel met gearchiveerde records wissen?

Gebruik de CHECKSUM() functie om te zien of de gegevens identiek zijn, zonder elke kolom te controleren.

Stel dat je zoiets hebt als dit:

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

De gegevens in de tweede en derde rij zijn duplicaten. Voer deze instructie uit om de gegevens op te schonen:

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


  1. Unieke sleutel met NULL's

  2. PHP Multiple Dropdown Box Formulier Verzenden naar MySQL

  3. Hoe selecteer ik paginering verstandig N aantal records uit MySQL Database?

  4. Verhoog een waarde in Postgres