sql >> Databáze >  >> RDS >> Oracle

odstranit staré záznamy seskupení podle tří sloupců a řazení podle data

Použijte ROW_NUMBER analytická funkce k nalezení řádků, které nejsou nejnovější v každé skupině, a poté můžete použít ROWID pseudosloupec ke korelaci v 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
)

Což odstraní 22 řádků.

db<>fiddle zde




  1. Nesprávná syntaxe poblíž „“

  2. Jaký je význam <> v dotazu mysql?

  3. Ověření hesla Postgres se nezdařilo

  4. Výběr náhodného záznamu z databáze MySQL