SQL178 工作日各时段叫车量、等待接
SQL178 工作日各时段叫车量、等待接单时间和调度时间
叫车量:因为每一次打车记录都赋予了时段,故count(period)即为某一时段的叫车量
等待时间:结束打车时间-打车时间。因为有可能出现打车过程中取消订单的情况,此时order_id为null,使用if()将其筛掉即可。
调度时间:即司机过来接你上车所用的时间。start_time-order_time
可以通过case来给period字段分配多个值,是否工作日可以用dayofweek判断:1为周日,2为周一以此类推;
time()函数将日期格式化为时分秒的类型,使用加减运算则返回秒数,再除以60就可以转换为分钟;
with t1 as(
select
case
when time(event_time)>='07:00:00' and time(event_time)<'09:00:00' then '早高峰'
when time(event_time)>='09:00:00' and time(event_time)<'17:00:00' then '工作时间'
when time(event_time)>='17:00:00' and time(event_time)<'20:00:00' then '晚高峰'
else '休息时间'
end period
,if(tb_get_car_record.order_id is null,null,timestampdiff(second,event_time,end_time)) wait_time
,timestampdiff(second,order_time,start_time) as dispatch_time
from
tb_get_car_record left join tb_get_car_order
on tb_get_car_record.order_id=tb_get_car_order.order_id
where
dayofweek(event_time) >1
and
dayofweek(event_time) <7
)
select
period
,count(period) as get_car_num
,round(avg(wait_time)/60,1) as avg_wait_time
,round(avg(dispatch_time)/60,1) as avg_dispatch_time
from
t1
group by
period
order by
get_car_num asc
叫车量:因为每一次打车记录都赋予了时段,故count(period)即为某一时段的叫车量
等待时间:结束打车时间-打车时间。因为有可能出现打车过程中取消订单的情况,此时order_id为null,使用if()将其筛掉即可。
调度时间:即司机过来接你上车所用的时间。start_time-order_time
可以通过case来给period字段分配多个值,是否工作日可以用dayofweek判断:1为周日,2为周一以此类推;
time()函数将日期格式化为时分秒的类型,使用加减运算则返回秒数,再除以60就可以转换为分钟;
with t1 as(
select
case
when time(event_time)>='07:00:00' and time(event_time)<'09:00:00' then '早高峰'
when time(event_time)>='09:00:00' and time(event_time)<'17:00:00' then '工作时间'
when time(event_time)>='17:00:00' and time(event_time)<'20:00:00' then '晚高峰'
else '休息时间'
end period
,if(tb_get_car_record.order_id is null,null,timestampdiff(second,event_time,end_time)) wait_time
,timestampdiff(second,order_time,start_time) as dispatch_time
from
tb_get_car_record left join tb_get_car_order
on tb_get_car_record.order_id=tb_get_car_order.order_id
where
dayofweek(event_time) >1
and
dayofweek(event_time) <7
)
select
period
,count(period) as get_car_num
,round(avg(wait_time)/60,1) as avg_wait_time
,round(avg(dispatch_time)/60,1) as avg_dispatch_time
from
t1
group by
period
order by
get_car_num asc
全部评论
相关推荐
点赞 评论 收藏
分享