2016-07-20 4 views
0

У меня есть 3 колонки. ПЛА | AccountNumber | OpenDate 1 ПЛА может иметь несколько AccountNumbers Каждый AccountNumber имеет соответствующий OpenDateКак выбрать min opendate из списка дубликатов?

В моем списке у меня есть много SSN, каждый содержащих несколько номеров счетов, которые могут быть открыты в разные дни.

Я хочу, чтобы результаты моего запроса были SSN | earlest OpenDate | AccountNumber, который соответствует самому раннему варианту.

Я имею дело с 200 000 записей.

EDIT: Сначала я сделал выберите ПЛА, мин (OpenDate), AcctNumber из таблицы группы По ССН, ACCOUNTNUMBER , но это не совсем дать мне правильные данные.

The raw data gives me something like this: 
    SSN | AcctNumber | OpenDate 
    --------------------------- 
    10 101   Jan 
    10 102   Feb 
    10 103   Mar 

Где я получил 10, Ян и AccNumber 102, который не номер счета, который связан с Яном OpenDate Посмотрев на других, я обнаружил, что номер счета я получил только один из номеров счетов, связанных с этим ССН, а не тот, который соответствует мин (OpenDate)

+0

Вы пробовали 'select ssn, min (OpenDate), acctNumber от tbl group от ssn, acctNumber'? – user2023861

+0

Да, спасибо. Но в этом утверждении нет ничего, что указывало бы номер возвращаемого номера учетной записи. – bteague

+0

Однако это утверждение достоверно дает мне самый ранний доступный вариант. – bteague

ответ

0

Если таблица выглядит так:

SSN | AcctNumber | OpenDate 
--------------------------- 
10 101   April 
10 101   May 
10 102   April 
20 201   June 
20 201   July 

вы хотите, чтобы ваш запрос, чтобы вернуть это ли?

SSN | AcctNumber | OpenDate 
--------------------------- 
10 101   April 
10 102   April 
20 201   June 

Тогда вы будете использовать этот запрос:

select ssn, min(OpenDate), acctNumber from tbl group by ssn, acctNumber 
+0

Ожидаемый результат: SSN | самый ранний OpenDate | AccountNumber, который соответствует самому раннему варианту. – nee21

+0

@ nee21, oops, fixed. Мой запрос был прав, но ожидаемая таблица результатов была неправильной. – user2023861

0

Вы можете попробовать это ..

select SSN , AcctNumber, OpenDate 
from (SELECT SSN , AcctNumber, OpenDate 
, ROW_NUMBER() OVER (PARTITION BY SSN, ORDER BY OpenDate ASC) AS RN 
    FROM table) AS temp 
WHERE temp.RN= 1 
0

С КТР AS (SELECT SSN, AcctNumber, OpenDate, ROW_NUM() OVER (PARTITION by SSN ORDER BY OpenDate DESC) AS RN) SELECT SSN, AcctNumber, OpenDate FROM CTE WHERE RN = 1;

Смежные вопросы