Используйте 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
Другие вопросы по тегам