sql >> Database teknologi >  >> RDS >> Mysql

Hvordan kan jeg rydde duplikerede poster i en tabel med arkiverede poster

Brug CHECKSUM() funktion for at se, om dataene er identiske, uden at kontrollere hver enkelt kolonne.

Antag, at du har noget som dette:

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

Dataene i anden og tredje række er dubletter. For at rense dataene skal du udføre denne sætning:

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. Hvad gør kolontegn:i en SQL-forespørgsel?

  2. Hvordan rydder du SQL Server-transaktionsloggen?

  3. Kør en forespørgsel med en LIMIT/OFFSET og få også det samlede antal rækker

  4. Oprettelse af en virtuel maskine med Oracle VM Virtual Box