要获取延迟最长的所有订单的列表:
with order_delay as (
select order#,
max( shipdate - orderdate ) as delayDays
from orders
group by order#
),
ranked_order_delay as (
select order#,
delayDays,
rank() over( order by delayDays desc ) as delayRank
from order_delay
)
select order#, delayDays from ranked_order_delay
where delayRank=1
;
使用下面的查询来获得一个订单,在最长延迟的情况下采用最低订单#。(应始终争取确定的结果)我相信这是最佳解决方案,只需要一次通过数据。
select min(order#) keep (dense_rank last order by (shipdate-orderdate)) as order#,
max(shipdate-orderdate) delaydays
from orders
在最长延迟的情况下取最高顺序#,然后简单地使用max(order#)
。
编辑 - 我知道有更好的方法。只是花了一点时间。我被挂断了,以为我必须确定每个订单的最大延迟#,但后来我意识到这个查询没有必要。