with t1 as (
select
    zone_id
    ,zone_name
    ,count(
        case when left(order_time,7) = '2023-02' and (hour(order_time) between 11 and 13 or hour(order_time) between 18 and 20)
        then order_id 
        end
    ) as peak_2023_02_delivered
    ,count(
        case when (left(order_time,7) = '2024-02') and (hour(order_time) between 11 and 13 or hour(order_time) between 18 and 20)
        then order_id 
        end
    ) as peak_2024_02_delivered
    ,count(
        case when (left(order_time,7) = '2024-01') and (hour(order_time) between 11 and 13 or hour(order_time) between 18 and 20)
        then order_id 
        end
    ) as peak_2024_01_delivered
    ,count(
        case when (left(order_time,7) = '2024-02') and (hour(order_time) between 11 and 13 or hour(order_time) between 18 and 20)
        then order_id end)
        -
    count(
        case when left(order_time,7) = '2023-02' and (hour(order_time) between 11 and 13 or hour(order_time) between 18 and 20)
        then order_id end)
    as yoy_delta 
    ,count(
        case when (left(order_time,7) = '2024-02') and (hour(order_time) between 11 and 13 or hour(order_time) between 18 and 20)
        then order_id end)
        -
    count(
        case when (left(order_time,7) = '2024-01') and (hour(order_time) between 11 and 13 or hour(order_time) between 18 and 20)
        then order_id end)
    as mom_delta
    ,round(avg(
        case when (left(order_time,7) = '2024-02') and (hour(order_time) between 11 and 13 or hour(order_time) between 18 and 20)
        then timestampdiff(minute,order_time,delivered_time)
        end
    ),2) as avg_peak_minutes_2024_02 
from
    Orders o join Zones z using(zone_id)
    join Couriers c using(courier_id)
group by zone_id,zone_name
),
t2 as (
select 
    zone_id
    ,zone_name
    ,courier_name
    ,row_number() over (partition by zone_id,zone_name order by count(*) desc,courier_id) as rk
from
    Orders o join Zones z using(zone_id)
    join Couriers c using(courier_id)
group by
    zone_id,zone_name,courier_name,courier_id
)
select t1.zone_id
        ,t1.zone_name
        ,t1.peak_2023_02_delivered
        ,t1.peak_2024_02_delivered
        ,t1.peak_2024_01_delivered
        ,t1.yoy_delta
        ,t1.mom_delta
        ,t1.avg_peak_minutes_2024_02
        ,t2.courier_name as top_courier_2024_02 
from t1 left join t2 using(zone_id,zone_name)
where t2.rk = 1