DELETE FROM student
WHERE ApplicationDateTime <> (SELECT max(ApplicationDateTime)
FROM student s2
WHERE s2.StudentID = student.StudentID)
Mengingat diskusi panjang di komentar, harap perhatikan hal berikut:
Pernyataan di atas akan bekerja pada database apa pun yang menerapkan konsistensi baca tingkat pernyataan dengan benar terlepas dari perubahan apa pun pada tabel saat pernyataan sedang berjalan.
Basis data tempat saya pasti tahu bahwa ini berfungsi dengan benar bahkan dengan modifikasi bersamaan ke tabel:Oracle (yang tentang pertanyaan ini), Postgres, SAP HANA, Firebird (dan kemungkinan besar MySQL menggunakan InnoDB). Karena semuanya menjamin tampilan data yang konsisten pada saat pernyataan dimulai. Mengubah <>
ke <>
tidak akan mengubah apa pun untuk mereka (termasuk Oracle tentang pertanyaan ini)
Untuk database yang disebutkan di atas, pernyataannya tidak tunduk pada tingkat isolasi karena pembacaan phantom atau pembacaan yang tidak dapat diulang hanya dapat terjadi antara beberapa pernyataan - tidak dalam tunggal penyataan.
Untuk database yang tidak mengimplementasikan MVCC dengan benar dan bergantung pada penguncian untuk mengelola konkurensi (sehingga memblokir akses tulis bersamaan) ini mungkin benar-benar menghasilkan hasil yang salah jika tabel diperbarui secara bersamaan. Bagi mereka solusinya menggunakan <>
mungkin dibutuhkan.