我有以下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
感谢您的输入
答案 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行,则会返回所有行。