我想使用 PL/SQL (Oracle) 获得第二高的最大值。
我有一个如下所示的表格:
CLIENT | ORDER_DATE
1 | 14/09/2018
1 | 01/02/2019
2 | 13/12/2019
2 | 01/01/2020
2 | 15/12/2019
我想获得一个表,其中包含每个客户的最大值(ORDER_DATE)和第二高的最大值(ORDER_DATE):
CLIENT | MAX(ORDER_DATE) | 2nd highest max(ORDER_DATE)
1 | 01/02/2019 | 14/09/2018
2 | 01/01/2020 | 15/12/2019
我尝试过使用排名,但只得到一行(一个随机客户端):
select *
from (select CLIENT,
max(ORDER_DATE),
row_number() over (order by max(ORDER_DATE) desc) as rk
from order_table
group by CLIENT) t
where rk = 2
最佳答案
在应用诸如ROW_NUMBER()
之类的分析函数后,您需要条件聚合:
WITH t2 AS
(
SELECT client,order_date,
ROW_NUMBER() OVER (PARTITION BY client ORDER BY order_date DESC) as rk
FROM order_table
)
SELECT client,
MAX(CASE WHEN rk=1 THEN order_date END) AS "max order date",
MAX(CASE WHEN rk=2 THEN order_date END) AS "2nd highest max ord.date"
FROM t2
GROUP BY client
关于sql - 获取 Oracle 上每个值的第二大最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63877662/