Vous pouvez essayer cette exécution plusieurs fois :
delete from mytable where id in (
select max(id)
from mytable
group by name
having count(1) > 1
);
Où plusieurs fois est égal au nombre maximum de répétitions que vous avez dans name
colonne.
Sinon, vous pouvez essayer cette requête plus complexe :
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
)
);
L'exécution de cette requête une seule fois devrait supprimer tout ce dont vous avez besoin. Je n'ai pas essayé cependant...