sql >> Databáze >  >> RDS >> Oracle

duplicitní záznamy je třeba odstranit Oracle db

Řádky jsou identické s výjimkou jejich ID a časového razítka vytvoření. Chcete-li najít duplikáty, musíte porovnat všechny ostatní sloupce:

Dotaz, hledání obou řádků hledáním duplikátů s jiným ID (t2.id <> t1.id ):

select *
from hourly_report_table t1
where exists
(
  select *
  from hourly_report_table t2
  where t2.id <> t1.id
  and t2.application = t1.application
  and t2.api_date = t1.api_date
  and t2.api_hour = t1.api_hour
  and ...
);

Příkaz delete zachovává pouze jeden řádek skupiny duplikátů porovnáním t2.id < t1.id :

delete
from hourly_report_table t1
where exists
(
  select *
  from hourly_report_table t2
  where t2.id < t1.id
  and t2.application = t1.application
  and t2.api_date = t1.api_date
  and t2.api_hour = t1.api_hour
  and ...
);

Pokud to chcete omezit na konkrétní datum a hodinu, udělejte to.

where exists (...) and api_date = date '2020-09-27' and api_hour = 17

Zabýváte se tedy pouze částí tabulky, ale musíte zajistit, aby DBMS tato data rychle našla (a nemusela znovu a znovu číst tabulku děr). Zadejte pro to index:

create index idx1 on hourly_report_table (api_date, api_hour);



  1. Jak exportovat a importovat soubor .sql z příkazového řádku s možnostmi?

  2. PHPUnit:Jak testovat databázové interakce na vzdáleném serveru Postgres?

  3. Procento SQL Oracle

  4. Průvodce nasazením TimescaleDB s Dockerem