Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

remover registros antigos agrupando por três colunas e ordenando por data


Use o ROW_NUMBER função analítica para encontrar as linhas que não são as últimas em cada grupo e, em seguida, você pode usar o ROWID pseudo-coluna para correlacionar no DELETE :
DELETE FROM tmp_data
WHERE ROWID IN (
  SELECT rid
  FROM   (
    SELECT ROWID As rid,
           ROW_NUMBER() OVER (
             PARTITION BY col_2, col_3, col_6
             ORDER BY col_4 DESC
           ) AS rn
    FROM   tmp_data
  )
  WHERE rn > 1
)

O que exclui 22 linhas.

db<>fiddle aqui