sql - 获取 Oracle 上每个值的第二大最大值

标签 sql oracle group-by window-functions

我想使用 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

Demo

关于sql - 获取 Oracle 上每个值的第二大最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63877662/

相关文章:

SQL 根据连接更新值

linux - 在Oracle EBS中使用更高版本的Unzip

sql - 删除列和列计数的冗余函数调用

mysql - 如果MySQL中未满足 "where",如何返回具有不同值的行

mysql - 我如何攻击这个 mySQL 查询?

regex - 使用模式匹配的奇怪 perl foreach 行为

python - Pandas 向后填充增量 12 个月

r - dplyr:按组减去与给定条件匹配的值

mysql - SQL查询根据计数和一些过滤器查找最大值

sql - Chef Cookbook 无法使用执行资源运行 sqllocaldb