To get a list of all orders that tie for the longest delay:
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
;
Use the query below to get a single order, taking the lowest order# in case of a tie for the longest delay. (should always strive for a determinant result) I believe this is the optimal solution, requiring only one pass through the data.
select min(order#) keep (dense_rank last order by (shipdate-orderdate)) as order#,
max(shipdate-orderdate) delaydays
from orders
To take the highest order# in case of a tie for longest delay, then simply use max(order#)
instead.
Edit - I knew there was a better way. It just took a wile. I was hung up thinking I had to determine the max delay for each order#, but then I realized it wasn't necessary for this query.