Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Entfernen Sie alte Datensätze, die nach drei Spalten gruppiert und nach Datum sortiert sind

Verwenden Sie die ROW_NUMBER Analysefunktion, um die Zeilen zu finden, die nicht die neuesten in jeder Gruppe sind, und dann können Sie die ROWID verwenden Pseudo-Spalte, mit der in DELETE korreliert werden soll :

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
)

Dadurch werden 22 Zeilen gelöscht.

db<>fiddle hier