Объединение записей на основе поля приоритета - PullRequest
0 голосов
/ 10 октября 2019

У меня есть таблица с демографической информацией людей, которая была составлена ​​из нескольких источников. В результате у некоторых людей есть дубликаты записей (на основе их идентификатора) с разными данными в других полях. Я добавил поле record_authority, которое перечисляет приоритет строки на основе ее исходного источника. Вот как это выглядит:

record_authority    identifier    lastname    firstname    dob
1                   1234          Doe         William      1/1/2000
3                   1234          Doe         Bill         1/1/2000
2                   5678          Smith       Jane         NULL
3                   5678          Smith       Jane         1/1/1990
1                   9999          Brown       John         NULL
4                   9999          Brown       John         NULL

И вот что я пытаюсь закончить. Значения NULL должны быть заменены значениями, отличными от NULL с наивысшим приоритетом, если они доступны.

identifier    lastname    firstname    dob
1234          Doe         William      1/1/2000
5678          Smith       Jane         1/1/1990
9999          Brown       John         NULL

Любая помощь приветствуется!

1 Ответ

0 голосов
/ 10 октября 2019

Один метод использует row_number():

select t.*
from (select t.*,
             row_number() over (partition by identifier 
                                order by (case when record_authority is null then 2 else 1 end), record_authority asc
                               ) as seqnum
      from t
     ) t
where seqnum = 1;

Другой метод использует коррелированный подзапрос:

select t.*
from t
where t.record_authority = (select min(t2.record_authority)
                            from t t2
                            where t2.identifier = t.identifier
                           );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...