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

Slet dublerede rækker i Oracle SQL, efterlad de seneste poster

Her er en tilgang, der bruger række-id'erne:

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
    )

Underforespørgslen genererer listen over række-id'er for rækker, der ikke er de seneste i deres gruppe (dvs. alle poster med samme par_num ,tran_num ) - den seneste post pr. gruppe identificeres ved hjælp af row_number() . Den ydre forespørgsel sletter bare disse rækker.



  1. Oracle. Vælg alle, hvis parameteren er null, ellers returnerer et specifikt vareproblem

  2. Tjek om tabellen arver fra en anden tabel i PostgreSQL

  3. Hvordan bruger man mysqli forberedte udsagn?

  4. Mysql - EXPLAIN SELECT fra en VIEW søger i alle rækker i hovedtabellen