Oracle
 sql >> Baza danych >  >> RDS >> Oracle

zduplikowane rekordy należy usunąć Oracle db

Wiersze są identyczne, z wyjątkiem ich identyfikatora i sygnatury czasowej utworzenia. Aby znaleźć duplikaty, musisz porównać wszystkie inne kolumny:

Zapytanie, które znajduje oba wiersze, szukając duplikatów z innym identyfikatorem (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 ...
);

Instrukcja delete zachowuje tylko jeden wiersz z grupy duplikatów, porównując 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 ...
);

Jeśli chcesz ograniczyć to do określonej daty i godziny, zrób to.

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

W ten sposób masz do czynienia tylko z częścią tabeli, ale musisz upewnić się, że DBMS może szybko znaleźć te dane (i nie musi ciągle czytać tabeli otworów). Podaj indeks:

create index idx1 on hourly_report_table (api_date, api_hour);



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tworzenie prostego interfejsu użytkownika umożliwiającego dostęp do bazy danych Oracle

  2. Oracle Floats a liczba

  3. Wyjaśnienie operatora Oracle MINUS

  4. Pozbądź się zduplikowanych wartości z jednej kolumny w dwóch kolumnach wybierz

  5. Kolejność Oracle SQL według problemów z podzapytaniami!