sql >> Databasteknik >  >> RDS >> Oracle

Ta bort dubbletter av rader i Oracle SQL och lämna de senaste posterna

Här är ett tillvägagångssätt som använder rad-ID:n:

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
    )

Underfrågan genererar listan med rad-ID för rader som inte är de senaste i sin grupp (dvs. alla poster som har samma par_num ,tran_num ) - den senaste posten per grupp identifieras med row_number() . Den yttre frågan tar bara bort dessa rader.



  1. MYSQL Välj inom samma tabell

  2. Är användningen av SELECT COUNT(*) före SELECT INTO långsammare än att använda undantag?

  3. Kontrollera om ett objekt inte finns i en annan tabell

  4. Gå med i set-returning function (SRF) och åtkomstkolumner i SQLAlchemy