Вы можете сгенерировать ROWID всех строк, кроме строки с максимальной датой (для заданных EMPIds), и удалить их. Я обнаружил, что это эффективно, так как это подход, основанный на множествах, и используется аналитика, rowID.
--get list of all the rows to be deleted.
select row_id from (
select rowid row_id,
row_number() over (partition by emp_id order by date desc) rn
from <table_name>
) where rn <> 1
А затем удалите строки.
delete from table_name where rowid in (
select row_id from (
select rowid row_id,
row_number() over (partition by emp_id order by date desc) rn
from <table_name>
) where rn <> 1
);