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

fjern gamle poster gruppering efter tre kolonner og sortering efter dato

Brug ROW_NUMBER analytisk funktion til at finde de rækker, der ikke er de seneste i hver gruppe, og så kan du bruge ROWID pseudo-kolonne at korrelere 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
)

Som sletter 22 rækker.

db<>fiddle her




  1. Hver afledt tabel skal have sit eget alias - hvornår er noget en afledt tabel?

  2. Hvorfor MySQL's LEFT JOIN returnerer NULL-poster, når med WHERE-klausul?

  3. Indstillinger for forbindelsestimeout for Oracle-database

  4. JPA Criteria Builder rækkefølge efter en sumkolonne