Я пытался создать таблицу с 2 столбцами party_id и matched_party_id для идентификации дубликатов, как описано ниже:SQL разделов и использование аналитических функций
Как вы видите, глядя на [First_NM + Last_NM + Zip_CD] мы может идентифицировать несколько повторяющихся записей. Я хочу, чтобы соответствовать этим и держать их в зонте наиболее происходящего party_id
PARTY_ID FIRST_NM LAST_NM ZIP_CD
----------------------------------------
95678 JANE DOE 7075
12345 JOHN DOE 7000
10000 JOHN DOE 7075
10000 JOHN DOE 7075
95678 JOHN DOE 7075
95678 JOHN DOE 7075
95678 JOHN DOE 7075
88648 JOHN DOE 7075
88648 JOHN DOE 7075
23456 JOHN DOE 7075
95678 SAM DOE 7075
95678 SAM DOE 7075
Обязательного выход
Party_ID Matched_ID
-----------------------
95678 10000
95678 88648
95678 23456
поскольку в пределах раздела дублей мы определили 4 отчетливого party_id-х именно 95678,10000, 88648 и 23456 и 95678 происходит больше всего раз, поэтому необходимо сопоставить все другие party_id с этим party_id.
Это код, который я использую. Но стенает LEAD_PI нулевые значения
SELECT MAX_PI AS PARTY_ID, LEAD_PI AS MATCHED_ID from
(SELECT DISTINCT B.FIRST_NM, B.MDDL_NM, B.LAST_NM, B.ZIP_CD,MAX_PI,LEAD_PI,
FROM (SELECT I.PARTY_ID,I.FIRST_NM, I.MDDL_NM, I.LAST_NM,A.ZIP_CD,
LEAD(I.PARTY_ID) OVER (PARTITION BY I.FIRST_NM, I.MDDL_NM, I.LAST_NM, A.ZIP_CD ORDER BY I.FIRST_NM, I.MDDL_NM,I.LAST_NM, A.ZIP_CD) AS LEAD_PI, MAX(I.PARTY_ID) OVER (PARTITION BY I.FIRST_NM, I.MDDL_NM, I.LAST_NM, A.ZIP_CD) AS MAX_PI
FROM INDVDL I JOIN PARTY_ADDR A
ON I.PARTY_ID = A.PARTY_ID
) B
WHERE MIN_PI <> MAX_PI
AND MAX_PI <> nvl(LEAD_PI,0)
Это для oracle rdbms – user3002581
Что делать, если две партии_изы совпадают, и оба происходят одинаковое количество раз? Как вы выбираете тот, который соответствует другим? –
в этом сценарии мы можем выбрать функцию max и выбрать party_id, который больше, чем другой. – user3002581