Gunakan ROW_NUMBER
fungsi analitik untuk menemukan baris yang bukan yang terbaru di setiap grup dan kemudian Anda dapat menggunakan ROWID
pseudo-kolom untuk dikorelasikan dengan 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
)
Yang menghapus 22 baris.
db<>fiddle di sini