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

Usuń zduplikowane wiersze w Oracle SQL, pozostawiając najnowsze wpisy

Oto podejście wykorzystujące identyfikatory wierszy:

delete from transaction
where 
    last_update = date '2020-03-01'
    and rowid in (
        select rid
        from (
            select 
                rowid rid, 
                row_number() over(partition by par_num ,tran_num order by last_update desc) rn
            from transaction                
        ) t
        where rn > 1
    )

Podzapytanie generuje listę identyfikatorów wierszy dla wierszy, które nie są najnowsze w swojej grupie (tzn. wszystkie rekordy mające ten sam par_num ,tran_num ) - najnowszy rekord na grupę jest identyfikowany za pomocą row_number() . Zewnętrzne zapytanie po prostu usuwa te wiersze.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. upłynął limit czasu. wszystkie połączenia w puli były używane i osiągnięto maksymalny rozmiar puli

  2. Uzyskaj kopertę.tj. nakładające się okresy czasu

  3. Jak ustawić wiele szerokości kolumn w jednym poleceniu w Oracle?

  4. Jaka jest główna różnica między Varchar2 a char

  5. Lista elementów formatu daty i godziny w Oracle