Выявление дубликатов в разделе с разными идентификаторами

Я новичок в 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 пункт.

Кроме того, я заменил списки столбцов * для удобства. Добавьте в столбцы, которые вы хотите.

Другие вопросы по тегам