Verwenden Sie die ROW_NUMBER
Analysefunktion, um die Zeilen zu finden, die nicht die neuesten in jeder Gruppe sind, und dann können Sie die ROWID
verwenden Pseudo-Spalte, mit der in DELETE
korreliert werden soll :
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
)
Dadurch werden 22 Zeilen gelöscht.
db<>fiddle hier