Możesz wypróbować to bieganie wiele razy :
delete from mytable where id in (
select max(id)
from mytable
group by name
having count(1) > 1
);
Gdzie wiele razy równa się maksymalnej liczbie powtórzeń w name
kolumna.
W przeciwnym razie możesz wypróbować to bardziej złożone zapytanie:
delete from mytable where id in (
select id from mytable
except
(
select min(id)
from mytable
group by name
having count(1) > 1
union all
select min(id)
from mytable
group by name
having count(1) = 1
)
);
Uruchomienie tego zapytania tylko raz powinno usunąć wszystko, czego potrzebujesz. Nie próbowałem tego...