Скорее всего, вы могли бы достичь этого с помощью самостоятельного объединения и НЕ НУЛЯ.
Присоединение к запросам DELETE может быть немного опасным, поскольку чем сложнее, тем больше риск удаления, чем вы намереваетесь в некоторых обстоятельствах.
Но я бы подошел к этому как.
DELETE
a.*
FROM
mytable AS a
LEFT JOIN mytable AS b ON
b.date > a.date
AND (b.name=a.name OR (b.date = a.date AND b.rowid>a.rowid))
WHERE
AND b.rowid IS NOT NULL
Объединение и IS NOT NULL находят каждую строку, для которой существует более новая строка с тем же именем. Он также правильно обрабатывает случай двух строк с одинаковой датой - если они имеют одинаковую дату, то он идет по rowid (что бы это ни было).
Надеюсь, что-то подобное работает.