Вы должны иметь возможность создать подходящее CTE (Common Table Expression), разделив эти адреса на части. Вы не предоставили много подробностей - поэтому я попытался составить некоторые имена столбцов и таблиц - адаптировать их по мере необходимости.
Попробуйте - это удалит все дубликаты из вашей таблицы:
;WITH DuplicateAddr AS
(
SELECT
(list of columns you need),
ROW_NUMBER() OVER (PARTITION BY Street,ZipCode,City
ORDER BY DateLastChange DESC) 'RowNum'
FROM dbo.Addresses
)
SELECT (list of columns)
FROM DuplicateAddr
WHERE RowNum > 1
GO
С помощью этого CTE вы «разбиваете» свои данные в соответствии со списком столбцов - используйте те, которые вам нужны. Каждый раздел данных (например, каждый адрес, определенный Street,ZipCode,City
) получит последовательные числа, основанные на некотором порядке (который вы определяете в CTE - я выбрал DateLastChange
как одну возможность).
Таким образом, строки с RowNum = 1
составляют набор «первых» адресов - вместо просто SELECT (columns) FROM DuplicateAddr
вы, конечно, также можете сделать INSERT INTO ....
на основе этого критерия.
Все строки с RowNum > 1
являются «дублирующими» или дополнительными адресами - вставьте их во вторую таблицу.