If you have a threshold distance below which points with the same name are close enough to be thought of as duplicates, then you can (a) take the X / Y coordinates for each point, (b) divide X / Y by threshold distance, then round to the nearest integer, (c) group points by name and rounded coordinates, then (d) take the first point in each group and delete the rest.
See example MXB.
-- create table for IDs to keep
CREATE TABLE [keep] ([mfd_id] INT64, INDEX [mfd_id_x] BTREE ([mfd_id]));
-- collect duplicates by name / collapsed coordinates
INSERT INTO [keep] ([mfd_id])
SELECT First([mfd_id]) FROM (
SELECT [mfd_id], [name],
Round(VectorValue(GeomCoordXY([geom], 0), 0) / 50) AS [cx],
Round(VectorValue(GeomCoordXY([geom], 0), 1) / 50) AS [cy]
) GROUP BY [name], [cx], [cy];
-- show duplicates (used as an example)
SELECT * FROM [buildings] WHERE [mfd_id] NOT IN [keep] ([mfd_id]);
-- delete duplicates
--DELETE FROM [buildings] WHERE [mfd_id] NOT IN [keep] ([mfd_id]);
I keep IDs to keep in an intermediate table for simplicity.
Hope this helps.