sql >> Database teknologi >  >> RDS >> Oracle

duplikerede poster skal slette oracle db

Rækkerne er identiske bortset fra deres id og oprettelsestidsstempel. For at finde dubletter skal du sammenligne alle andre kolonner:

Forespørgslen, der finder begge rækker ved at lede efter dubletter med et andet 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 ...
);

Sletsætningen beholder kun én række af en gruppe af dubletter ved at sammenligne 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 ...
);

Hvis du vil begrænse dette til en bestemt dato og et bestemt tidspunkt, skal du gøre det.

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

Du har altså kun at gøre med en del af tabellen, men du skal sørge for, at DBMS kan finde disse data hurtigt (og ikke at skulle læse hultabellen igen og igen). Angiv et indeks for dette:

create index idx1 on hourly_report_table (api_date, api_hour);



  1. Brug af rekursiv CTE med Ecto

  2. Hvordan læser man JSON ud af Doobie Scala PostgreSQL-database med Circe?

  3. Kilde til fejlen ' uventet søgeordsargument 'hent' ' i pandas to_sql?

  4. Hvordan gemmer man flere gentagelige felter som array i databasen?