从记录组中检索最大日期记录

时间:2015-02-16 08:46:21

标签: sql oracle max

我有以下oracle表,下面有3列。如您所见,我拥有与不同卡号和不同date_open相同的contract_number。我需要检索每个contract_number的最大日期

CONTRACT_NUMBER    CARD_NUMBER          DATE_OPEN

009-P-0000202      1236547896542145    11/23/2012
009-P-0000202      5555666644441111    6/20/2014
009-P-0000202      6655225544665878    6/25/2014
009-P-008880       9666998775458789    5/16/2011
009-P-008880       4561637899876435    1/22/2013
009-P-0010873      6456879413185467    5/14/2013
009-P-0200749      5000223365521456    2/28/2013
009-P-098538       1000222266669870    12/19/2011
009-P-098538       1000222266665555    3/22/2012
009-P-098538       1000222266667777    7/27/2012
009-P-098538       1000222266669995    2/27/2013
009-P-098538       1000222266663333    3/22/2013
009-P-098538       1000222266661222    4/18/2013
009-P-098538       1000222266667567    7/26/2013
009-P-098538       1000222266669876    1/10/2014
009-P-098538       1000222266664456    6/13/2014
009-P-098538       1000222266663345    8/19/2014
009-P-098538       1000222266662321    12/5/2014

所需的结果应如下所示:

CONTRACT_NUMBER    CARD_NUMBER          DATE_OPEN

009-P-0000202      6655225544665878    6/25/2014
009-P-008880       4561637899876435    1/22/2013
009-P-0010873      6456879413185467    5/14/2013
009-P-0200749      5000223365521456    2/28/2013
009-P-098538       1000222266662321    12/5/2014

感谢您的输入

4 个答案:

答案 0 :(得分:0)

如果我理解你的问题,看起来你是在追求一个简单的小组。

SELECT t.Contract_Number,
       MAX(t.card_number) as MaxCardNumber,
       MAX(t.Date_Open) as maxDate
FROM yourTableName t
GROUP BY t.Contract_Number

请注意,您也会获得最大卡号。如果您想获得仅按合同编号分组的列表,则必须对卡号应用聚合功能。

答案 1 :(得分:0)

您可以使用 ROW_NUMBER 分析功能。

WITH DATA AS(
SELECT t.*,
              ROW_NUMBER() OVER (PARTITION BY CONTRACT_NUMBER     
                                     ORDER BY DATE_OPEN DESC) AS rn
         FROM my_table t
)
SELECT CONTRACT_NUMBER, CARD_NUMBER, DATE_OPEN
FROM DATA 
WHERE rn = 1
/

mytable替换为您的实际表名。

答案 2 :(得分:0)

SELECT *
FROM   table_name
WHERE  date_open IN (SELECT MAX(date_open)
                     FROM   table_name
                     GROUP BY
                            CONTRACT_NUMBER
                     ORDER BY
                            date_open DESC)
ORDER BY
       date_open DESC

答案 3 :(得分:0)

使用子查询查找每个CONTRACT_NUMBER的最大日期:

select * from table t1
where DATE_OPEN = (select max(DATE_OPEN) from table t2
                   where t1.CONTRACT_NUMBER = t2.CONTRACT_NUMBER)

如果最大日期有几个CONTRACT_NUMBER行,则会返回所有行。