комбинация отличных в postgresql - PullRequest
0 голосов
/ 19 марта 2020

Я пытаюсь получить комбинацию отличного значения. Что я объяснил ниже

Пример 1: введите описание изображения здесь

здесь я выделил в желтом цвете исходная система, идентификатор партии и номер группы как дубликаты. в этом случае, если комбинация исходной системы, идентификатора партии и номера группы дублируется, необходимо проверить максимум даты последнего обновления и исключить одну запись

пример 2:

введите описание изображения здесь

Здесь я выделил желтым цветом исходную систему, идентификатор партии, номер группы, дату последнего обновления и дату создания в двух экземплярах. в этом случае, если комбинация исходной системы, идентификатора партии, номера группы, даты последнего обновления и создания дублируется, необходимо получить комбинацию всех пяти столбцов как отличных

select 
"Source System",
"Group Number",
"Partner Party Id"
from 
VT_PC_DE_DUP_CONSOLIDATED_JAN_22_INC
where 
("Source System" in (select "Source System" from VT_PC_DE_DUP_CONSOLIDATED_JAN_22_INC group by "Source System","Group Number","Partner Party Id"
having count("Source System")
= 1)
and "Group Number" in (select "Group Number" from VT_PC_DE_DUP_CONSOLIDATED_JAN_22_INC group by "Source System",
"Group Number","Partner Party Id" having count("Group Number")
= 1)
and "Partner Party Id" in (select "Partner Party Id" from VT_PC_DE_DUP_CONSOLIDATED_JAN_22_INC group by "Source System",
"Group Number","Partner Party Id" having count("Partner Party Id")
= 1))
or "Partner Last Update Date Ref" in (select max("Partner Last Update Date Ref") from VT_PC_DE_DUP_CONSOLIDATED_JAN_22_INC group by
"Source System",
"Group Number","Partner Party Id","Partner Last Update Date Ref")
or "Partner Creation Date Ref" in (select max("Partner Creation Date Ref") from VT_PC_DE_DUP_CONSOLIDATED_JAN_22_INC group by
"Source System",
"Group Number","Partner Party Id","Partner Last Update Date Ref","Partner Creation Date Ref")

1 Ответ

0 голосов
/ 19 марта 2020

Если я следил за вами правильно, вы можете просто использовать distinct on:

select distinct on (source_system, party_id) vt.*
from vt_pc_de_dup_consolidated_jan_22_inc vt
order by source_system, party_id, last_update_date desc

Это даст вам самую последнюю запись для (source_system, party_id) кортежа, основанную на last_update_date. Если есть связи, выбирается только одна.

...