вывести дублированный идентификатор записи из условий в других столбцах sql - PullRequest
0 голосов
/ 15 апреля 2020

Представьте, что у меня есть этот набор данных:

serial_id | name | address_id | id_duplicates | dob
_______________________________________________________
1         | JOHN | QWERTY     | NULL          | 10/2001
2         | JOHN | QWERTY     | NULL          | 10/2001
3         | JOHN | AZERTY     | NULL          | 10/2001
4         | JOHN | QWERTY     | NULL          | 09/2001
5         | MARY | QWERTY     | NULL          | 10/2001
6         | MARY | AZERTY     | NULL          | 10/2001
7         | MARY | AZERTY     | NULL          | 10/2001

Я хочу заполнить id_duplicates любым любым из serial_id, когда записи соответствуют некоторым условиям.

Если я хочу, чтобы записи с одинаковым соответствием name, address_id и dob имели общий идентификатор из столбца serial_id, я бы, например, имел:

serial_id | name | address_id | id_duplicates | dob
_______________________________________________________
1         | JOHN | QWERTY     | 1             | 10/2001  --> match
2         | JOHN | QWERTY     | 1             | 10/2001  --> match
3         | JOHN | AZERTY     | 3             | 10/2001  --> no match on address_id
4         | JOHN | QWERTY     | 4             | 09/2001  --> no match on dob
5         | MARY | QWERTY     | 5             | 10/2001  --> no match on name
6         | MARY | AZERTY     | 6             | 10/2001  --> match 
7         | MARY | AZERTY     | 6             | 10/2001  --> match

Я с треском пытался сделать это с помощью вложенных запросов, которые я должен публиковать, так как они не имеют смысла ...

любая помощь будет оценена!

1 Ответ

2 голосов
/ 15 апреля 2020

Вы можете использовать dense_rank():

select t.*,
       dense_rank() over (order by name, address, dob) as id_duplicate
from t;

Если вы хотите это в update, вот один из методов:

update t
    set id_duplicate = tt.new_id_duplicate
    from (select t.*, 
                 dense_rank() over (order by name, address, dob) as new_id_duplicate
          from t
         ) tt
    where tt.serial_id = t.serial_id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...