Используйте Soundex и Substring, чтобы иметь возможность получить потенциальные повторяющиеся значения из БД
Я задал похожий вопрос [ Запрос к базе данных для поиска потенциальных дубликатов на основе нескольких столбцов, и на него любезно ответил мастер SQL Гордон Линофф.
В целом у меня есть около 100 тысяч записей о клиентах, и теперь я могу выяснить, что существует много дублирующих записей - в большинстве случаев имя и фамилия написаны с ошибками.
Вот запрос, который Гордон написал для меня...
select t
from (select t.*,
count(*) over (partition by soundex(fname), soundex(lname), dob) as cnt
from t
) t
where cnt > 1
order by dob, fname, lname;
И это прекрасно работает - однако, кажется, только подтягивает очень близких матчей. Я пытался обновить его, чтобы попытаться сопоставить только первые три буквы, но, похоже, он не очень хорошо работает, он дает мне намного больше записей с тем же самым DOB, однако, значения имени / фамилии это не только первые 3 буквы, но и микс совпадают в основном.
Итак, вот что я пытался сделать в строке count(*)
count(*) over (partition by substring(soundex(fname),0,3), substring(soundex(lname),0,3), dob) as cnt
но, как я уже сказал, он не получает точных совпадений из 3 символов, поэтому я получаю имена, такие как
Ana
Annette
Можно ли как-то обновить его, чтобы я мог немного глубже найти мои дубликаты, но использовать только первые 3 символа имени и фамилии, все еще используя Soundex? Или потенциально не использовать Soundex?
1 ответ
Проверь это
;WITH cte(fn, ln, dob)
AS (SELECT 'anna',
'elizibeth',
'2000-12-19'
UNION ALL
SELECT 'ann',
'elizibeth',
'2000-12-19'
UNION ALL
SELECT 'paul',
'eliot',
'2000-12-13'
UNION ALL
SELECT 'rindol',
'eliot',
'2000-12-13')
SELECT fn,ln,count(*)
FROM (SELECT Substring(fn, 1, 3) fn,
Substring(ln, 1, 3) ln,
dob
FROM cte)a
group by fn,ln