sql >> Databasteknik >  >> RDS >> Oracle

ta bort gamla poster grupperade efter tre kolumner och ordna efter datum

Använd ROW_NUMBER analytisk funktion för att hitta de rader som inte är de senaste i varje grupp och sedan kan du använda ROWID pseudo-kolumn att korrelera med i 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
)

Vilket tar bort 22 rader.

db<>fiol här




  1. php-variabel i MySQL-radnamn

  2. Hur skyddar man mot SQL-injektion när WHERE-satsen är byggd dynamiskt från sökformuläret?

  3. Java JDBC-åtkomst nekad för användaren

  4. Varför ger samma exakta fråga två olika MySQL-förklaringsresultat?