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

eliminar registros antiguos agrupados por tres columnas y ordenados por fecha

Usa el ROW_NUMBER función analítica para encontrar las filas que no son las últimas en cada grupo y luego puede usar el ROWID pseudo-columna para correlacionar en el 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
)

Que elimina 22 filas.

db<>fiddle aquí