Můžete to zkusit spustit několikrát :
delete from mytable where id in (
select max(id)
from mytable
group by name
having count(1) > 1
);
Kde vícekrát se rovná maximálnímu počtu opakování, které máte v name
sloupec.
Jinak můžete zkusit tento složitější dotaz:
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
)
);
Spuštění tohoto dotazu pouze jednou by mělo odstranit vše, co potřebujete. I když jsem to nezkoušel...