sql >> Databasteknik >  >> RDS >> Mysql

Hur kan jag rensa bort dubblettposter i en arkiverad posttabell

Använd CHECKSUM() funktion för att se om data är identiska, utan att kontrollera varje enskild kolumn.

Anta att du har något sånt här:

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

Data i den andra och den tredje raden är dubbletter. För att rensa data, kör den här satsen:

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. Hur man hittar icke-numeriska värden i en kolumn i MySQL

  2. InnoDB-tabeller finns i MySQL men säger att de inte existerar efter att ha kopierat databasen till ny server

  3. Hur man visar sorteringen av en kolumn i SQL Server (T-SQL)

  4. php mysql fulltextsökning:lucene, sfinx eller?