Oracle
 sql >> база данни >  >> RDS >> Oracle

премахнете старите записи, групирани по три колони и подредени по дата

Използвайте ROW_NUMBER аналитична функция за намиране на редовете, които не са най-новите във всяка група и след това можете да използвате ROWID псевдо-колона за корелация в 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
)

Което изтрива 22 реда.

db<>fiddle тук




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Модел на цифров формат TO_Char в Oracle

  2. Променливата за свързване, използвана в BEGIN/END, се изчиства

  3. Как да използвам константа на пакета в SQL оператор SELECT?

  4. plsql блок, за да получите резултата от динамичната sql заявка

  5. Условие за присъединяване към Oracle с Топ 1