with tmp as ( select t1.zone_id, t1.zone_name, date_format(order_time, '%Y-%m') order_time, avg(TIMESTAMPDIFF(MINUTE, order_time, delivered_time)) as delivered_time, count(order_id) as order_num FROM Zones t1, Couriers t2, Orders t3 where t1.zone_id = t3.zone_id and t2.courier_id = t3.courier_id and status = 'delivered' and ( HOUR(order_time) BETWEEN 11 AND 13 OR HOUR(order_time) BETWEEN 18 AND 20 ) and date_format(order_time, '%Y-%m') in ('2024-02', '2024-01', '2023-02') group by t1.zone_id, t1.zone_name, date_format(order_time, '%Y-%m') ), tmp2 as ( SELECT zone_name, courier_name FROM ( SELECT zone_name, courier_name, row_number() over ( partition by zone_name order by o_num desc, zone_id ) as rk FROM ( SELECT zone_name, t1.zone_id, courier_name, count(order_id) as o_num FROM Zones t1, Couriers t2, Orders t3 where t1.zone_id = t3.zone_id and t2.courier_id = t3.courier_id and status = 'delivered' and ( HOUR(order_time) BETWEEN 11 AND 13 OR HOUR(order_time) BETWEEN 18 AND 20 ) and date_format(order_time, '%Y-%m') in ('2024-02') group by zone_name, courier_name, t1.zone_id ) a ) b where rk = 1 ), tmp3 as ( SELECT zone_id, zone_name, max( case when order_time = '2023-02' then order_num else 0 end ) peak_2023_02_deliv, max( case when order_time = '2024-02' then order_num else 0 end ) peak_2024_02_deliv, max( case when order_time = '2024-01' then order_num else 0 end ) peak_2024_01_deliv, round( max( case when order_time = '2024-02' then delivered_time else 0 end ), 2 ) avg_peak_minutes_2024_02 FROM tmp group by zone_id, zone_name ) SELECT t2.zone_id, t2.zone_name, peak_2023_02_deliv as peak_2023_02_delivered, peak_2024_02_deliv as peak_2024_02_delivered, peak_2024_01_deliv as peak_2024_01_delivered, peak_2024_02_deliv - peak_2023_02_deliv as yoy_delta, peak_2024_02_deliv - peak_2024_01_deliv as mom_delta, avg_peak_minutes_2024_02, t1.courier_name as top_courier_2024_02 FROM tmp2 t1, tmp3 t2 where t1.zone_name = t2.zone_name order by t2.zone_id, t2.zone_name