思路: ①将表1左连接表2,不用join而是left join因为order_id是null的行也需要计算,需要保留表1全部信息,形成tb1,并转化event_time分别为一周的第几天 a、一天中的第几小时(或者精确时间时分秒)b,a和b用于时间筛选和分组。 ②根据时间b对数据进行时段分组、聚类,然后计算相应数据。 ③根据a进行周一-周五的时间筛选。 with tb1 as( select order_id, event_time, date_format(event_time,'%w') as a, date_format(event_time,'%H%i%s') as b, end_time, order_time, start_time from tb_get_car_record left join tb_get_car_order using(order_id)) select period, count(event_time) get_car_num, round(avg(timestampdiff(second, event_time, end_time))/60,1), round(avg((timestampdiff(second, order_time, start_time))/60),1) from( select *, case when b>=070000 and b<090000 then '早高峰' when b>=090000 and b<170000 then '工作时间' when b>=170000 and b<200000 then '晚高峰' else '休息时间' end as period from tb1 where a between 1 and 5) as tb2 group by period order by get_car_num