sql >> Base de Datos >  >> RDS >> Oracle

Eliminar filas duplicadas en Oracle SQL, dejando las últimas entradas

Aquí hay un enfoque usando los ID de fila:

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
    )

La subconsulta genera la lista de ID de fila para filas que no son las últimas en su grupo (es decir, todos los registros que tienen el mismo par_num ,tran_num ) - el registro más reciente por grupo se identifica usando row_number() . La consulta externa simplemente elimina esas filas.