with a as (select p1.courier_id,
count(distinct parcel_id) orders_7d1,
count(if(timestampdiff(second,shipped_ts,delivered_ts)/60<=promised_minutes,1,null)) on_time_7d1,
ROUND(AVG(TIMESTAMPDIFF(MINUTE, shipped_ts, delivered_ts)), 2) avg_minutes_7d1
from parcel p1
inner join (select max(delivered_ts) mdt
from parcel
where delivered_ts is not null
) p2
on datediff(mdt,p1.delivered_ts)<=6
where delivered_ts is not null
group by p1.courier_id)
select c.courier_id,
courier_name,
city,
ifnull(orders_7d1,0) orders_7d,
ifnull(on_time_7d1,0) on_time_7d,
ifnull(ROUND(on_time_7d1 / orders_7d1, 2),0) on_time_rate,
ifnull(avg_minutes_7d1,0) avg_minutes_7d,
rank() over(partition by city order by ifnull(ROUND(on_time_7d1 / orders_7d1, 2),0) desc,ifnull(avg_minutes_7d1,0) asc) rank_in_city
from a
inner join courier c
on a.courier_id=c.courier_id
where orders_7d1>0
order by city,rank_in_city,courier_id