#
# 按照period分组

with t as(
select o.order_id, event_time, end_time, start_time, finish_time,order_time,
case 
    when '07:00:00' <= time(event_time) and time(event_time) < '09:00:00' then '早高峰'
    when '09:00:00' <= time(event_time) and time(event_time)< '17:00:00' then '工作时间'
    when '17:00:00' <= time(event_time) and time(event_time)< '20:00:00' then '晚高峰'
    else '休息时间'
    end as period

from tb_get_car_record r
join tb_get_car_order o on r.order_id = o.order_id
where weekday(event_time) between 0 and 4 #周一到周五
)

select
    period,
    count(order_id) 'get_car_num',
    round(avg(timestampdiff(second, event_time, end_time) / 60),1) 'avg_wait_time',
    round(avg(timestampdiff(second, order_time, start_time) / 60),1) 'avg_dispatch_time'
from t
group by period
order by get_car_num asc;

先计算period,然后根据period进行分组计算即可,注意要求的是工作日的时间