Выявление дубликатов в разделе с разными идентификаторами
Я новичок в SQL и анализа данных. У меня есть сценарий, который я пытаюсь определить, используя разделы SQL. В основном я хочу найти дубликаты [то же имя, фамилия, фамилия, суффикс-код и почтовый индекс, но только если идентификаторы разные.
Этот запрос дает мне только частичные результаты, которые не являются правильными... я знаю, что мне не хватает фильтра здесь и там.
SELECT i.party_id,
I.FIRST_NM,
I.LAST_NM,
I.SFFX_CD,
A.ZIP_CD,
ROW_NUMBER() OVER (PARTITION BY I.FIRST_NM,
I.LAST_NM,
I.SFFX_CD,
A.ZIP_CD
ORDER BY I.PARTY_ID) AS RN
FROM INDVDL I,
PARTY_ADDR A
WHERE I.PARTY_ID = A.PARTY_ID
я должен получить только те, отмеченные **, а не остальные
PARTY_ID FIRST_NM LAST_NM SFFX_CD ZIP_CD RN
886874 John Doe Jr. 45402 1
886874 John Doe Jr. 45406 1
934635 John Doe Jr. 45406 2
886874 John Doe Jr. 45415 1
886874 John Doe Jr. 45415 2
886874 John Doe Jr. 45415 3
886874 John Doe Jr. 45415 4
886874 John Doe Jr. 45415 5
886874 John Doe Jr. 45415 6
**886874 John Doe Jr. 45415 7
**934635 John Doe Jr. 45415 8
934635 John Doe Jr. 45415 9
934635 John Doe Jr. 45415 10
1 ответ
Вот мое предложение. Используйте оконные функции, чтобы получить минимальное и максимальное значения PARTY_ID
для групп, которые вы имеете в виду. Затем отфильтруйте, чтобы получить только те строки, где они различаются:
SELECT *
FROM (SELECT i.*, a.*,
MIN(I.PARTY_ID) OVER (PARTITION BY I.FIRST_NM, I.LAST_NM, I.SFFX_CD, A.ZIP_CD) as min_pi,
MAX(I.PARTY_ID) OVER (PARTITION BY I.FIRST_NM, I.LAST_NM, I.SFFX_CD, A.ZIP_CD) as max_pi
FROM INDVDL I JOIN
PARTY_ADDR A
ON I.PARTY_ID = A.PARTY_ID
) ia
WHERE min_pi <> max_pi;
Примечание: я исправил ваши join
синтаксис для использования явных объединений. Простое правило: никогда не используйте запятые в from
пункт.
Кроме того, я заменил списки столбцов *
для удобства. Добавьте в столбцы, которые вы хотите.