Oracle
 sql >> Baza danych >  >> RDS >> Oracle

usuń stare rekordy grupując po trzy kolumny i porządkując według daty

Użyj ROW_NUMBER funkcja analityczna, aby znaleźć wiersze, które nie są najnowsze w każdej grupie, a następnie możesz użyć ROWID pseudokolumna do skorelowania w 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
)

Który usuwa 22 wiersze.

db<>fiddle tutaj




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak zaktualizować za pomocą wewnętrznego sprzężenia w Oracle

  2. pytanie dotyczące zapisanego tekstu programu pl/sql

  3. Oracle — lewe sprzężenie zewnętrzne w wielu tabelach nie zwraca żądanych wartości null

  4. czas odświeżania zmaterializowanego widoku oracle

  5. Jak mogę naprawić ten błąd:nieobsługiwany SQL92?