do it manually
unless you can dream up some method of validating which is 'the' best row to keep.
use your query to identify which rows have duplicates.
then display those rows in a form / report whatever
then manually go though the list to delete, so that would probably mean best to display on a form.
there's various identifiers that might make a row a duplicate
..its could be a typo in one or more columns eg Smith's & Co, Simths, Smths & Co, J Smith & Co
you may have the same company but a different address say a different branch
you may have more than one contact at the same address eg compnay A dealt with Fred Bloggs, compnay B dealt with Jane Doe and company C dealt with Ouja M'Callit.
so possible mathcign criteria are similar top leve domain
ie match on @smiths.co.uk
match on postcode
use some form of phonics string comparison such as
double metaphone
deciding what is the best approach is tricky, especially for what is often a one off process.