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

rimuovi i record più vecchi raggruppando per tre colonne e ordinando per data

Usa il ROW_NUMBER funzione analitica per trovare le righe che non sono le ultime in ogni gruppo e quindi puoi utilizzare il ROWID pseudo-colonna con cui correlare in 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
)

Che elimina 22 righe.

db<>violino qui