Oracle
 sql >> Base de données >  >> RDS >> Oracle

supprimer les anciens enregistrements regroupés par trois colonnes et triés par date

Utilisez le ROW_NUMBER fonction analytique pour trouver les lignes qui ne sont pas les dernières dans chaque groupe, puis vous pouvez utiliser le ROWID pseudo-colonne à corréler avec dans le 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
)

Ce qui supprime 22 lignes.

db<>violon ici