如何从重复列表中选择min opendate?

时间:2016-07-20 17:39:47

标签: tsql

我有3列。 SSN |账户号码| Opendate里 1 SSN可能有多个AccountNumbers 每个AccountNumber都有一个相应的OpenDate

在我的列表中,我有很多SSN,每个都包含几个可能在不同日期打开的帐号。

我希望我的查询结果为SSN |最早的OpenDate | AccountNumber,与最早的opendate相对应。

我正在处理大约200,000条记录。

编辑:首先我做了     从表组按SSN,AccountNumber选择SSN,min(OpenDate),AcctNumber 但这并没有给我正确的数据。

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

我得到10,Jan和AccNumber 102这不是与Jan OpenDate相关联的帐号在查看其他人后,我发现我得到的帐号只是与该SSN相关的帐号之一而不是与min(OpenDate)对应的那个

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

答案 2 :(得分:0)

WITH CTE AS(选择SSN,AcctNumber,OpenDate,ROW_NUM()OVER(按SSN ORDER by OpenDate DESC划分)AS RN)SELECT SSN,AcctNumber,OpenDate FROM CTE WHERE RN = 1;