DELETE FROM student
WHERE ApplicationDateTime <> (SELECT max(ApplicationDateTime)
FROM student s2
WHERE s2.StudentID = student.StudentID)
Предвид дългата дискусия в коментарите, моля, обърнете внимание на следното:
Горното изявлениеще работите върху всяка база данни, която правилно прилага последователността на четене на ниво израз, независимо от всякакви промени в таблицата, докато операторът се изпълнява.
Бази данни, в които определено знам, че това работи правилно дори с едновременни модификации на таблицата:Oracle (този, за който е този въпрос), Postgres, SAP HANA, Firebird (и най-вероятно MySQL, използващ InnoDB). Тъй като всички те гарантират последователен изглед на данните в момента, когато е започнало изявлението. Промяна на <>
до <
няма да промени нищо за тях (включително Oracle, за който е този въпрос)
За посочените по-горе бази данни изявлението е не подлежи на ниво на изолация, тъй като фантомни четения или неповтарящи се четения могат да се случат само между множество изявления - не в рамките на единичен изявление.
За база данни, която не имплементира правилно MVCC и разчита на заключване за управление на паралелността (по този начин блокира едновременния достъп до запис), това всъщност може да доведе до грешни резултати, ако таблицата се актуализира едновременно. За тези заобиколно решение с помощта на <
вероятно е необходимо.