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

retrieve max date record out of group of records

我有以下 oracle table,其中包含以下 3 列。如您所见,我有相同的 contract_number 与不同的卡号和不同的 date_open 相关。我需要检索每个 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 2011 年 5 月 16 日
009-P-008880 4561637899876435 2013 年 1 月 22 日
009-P-0010873 6456879413185467 2013 年 5 月 14 日
009-P-0200749 5000223365521456 2/28/2013
009-P-098538 1000222266669870 2011 年 12 月 19 日
009-P-098538 1000222266665555 2012 年 3 月 22 日
009-P-098538 1000222266667777 2012 年 7 月 27 日
009-P-098538 1000222266669995 2/27/2013
009-P-098538 1000222266663333 2013 年 3 月 22 日
009-P-098538 1000222266661222 2013 年 4 月 18 日
009-P-098538 1000222266667567 2013 年 7 月 26 日
009-P-098538 1000222266669876 2014 年 1 月 10 日
009-P-098538 1000222266664456 6/13/2014
009-P-098538 1000222266663345 2014 年 8 月 19 日
009-P-098538 1000222266662321 12/5/2014

所需的结果应如下所示:

CONTRACT_NUMBER CARD_NUMBER DATE_OPEN

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

感谢您的意见

如果我理解你的问题,那么看起来你是在进行简单的分组。

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

请注意,您还将获得最大卡号。如果您想获得仅按合同编号分组的列表,您还必须对卡号应用聚合函数。

您可以使用 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 替换为您的实际 table 姓名。

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

使用子查询查找每个 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 行,将返回所有行。