工作日各时间段的叫车量、等待时间、调度时间

工作日各时间段的叫车量、等待时间、调度时间

问题:统计周一到周五各时段的叫车量、平均等待接单时间和平均调度时间。
全部以event_time-开始打车时间为时段划分依据,平均等待接单时间和平均调度时间均保留1位小数,平均调度时间仅计算完成了的订单,结果按叫车量升序排序。

注:
不同时段定义:早高峰 [07:00:00 , 09:00:00)、工作时间 [09:00:00 , 17:00:00)、晚高峰 [17:00:00 , 20:00:00)、休息时间 [20:00:00 , 07:00:00)
时间区间左闭右开(即7:00:00算作早高峰,而9:00:00不算做早高峰)
从开始打车到司机接单为等待接单时间,从司机接单到上车为调度时间。

1- 数据准备
表1: 用户打车信息表:t_taxi_info
id(主键id), uuid(用户id), order_id(订单id), city_name(城市), event_time(开始打车时间), end_time(结束打车时间:接单/订单取消)

表2: 订单信息表:t_order_info
id(主键id), uuid(用户id), order_id(订单id), driver_id(司机id), order_time(接单时间), start_time(订单开始时间), finish_time(订单完成时间), fare(费用), grade(评分)

注: 两张表的order_id 都是唯一值
-- 数据准备
WITH t_taxi_info AS (
SELECT * FROM (
  VALUES      (1, 1001, 90004, '深圳市', '2023-12-04 11:00:12', '2023-12-04 11:00:42')
            , (2, 1002, 90011, '深圳市', '2023-12-05 21:00:22', '2023-12-05 21:01:06')
            , (3, 1002, 90008, '深圳市', '2023-12-05 19:01:02', '2023-12-05 19:01:52')
            , (4, 1003, 90006, '深圳市', '2023-12-06 09:01:06', '2023-12-06 09:01:36')
            , (5, 1004, 90012, '深圳市', '2023-12-06 18:01:08', '2023-12-06 18:01:48')
            , (6, 1004, 90018, '深圳市', '2023-12-07 08:01:16', '2023-12-07 08:01:43')
            , (7, 1006, 90023, '深圳市', '2023-12-07 08:01:23', '2023-12-07 08:02:01')
            , (8, 1007, 90002, '深圳市', '2023-12-08 20:01:12', '2023-12-08 20:01:39')
            , (9, 1006, 90017, '深圳市', '2023-12-08 08:30:18', '2023-12-08 08:30:36')
) AS table_name(id, uuid, order_id, city_name, event_time, end_time)
)

, t_order_info AS (
SELECT * FROM (
  VALUES      (1, 1001, 90004, 2002, '2023-12-04 11:00:42', '2023-12-04 11:05:22', '2023-12-04 11:40:41', 38, 4.8)
            , (2, 1002, 90011, 2004, '2023-12-05 21:01:06', '2023-12-05 21:04:02', '2023-12-05 21:52:52', 46, 4.6)
            , (3, 1002, 90008, 2005, '2023-12-05 19:01:52', '2023-12-05 19:08:52', '2023-12-05 19:33:20', 29, 4.3)
            , (4, 1003, 90006, 2004, '2023-12-06 09:01:36', '2023-12-06 09:03:36', '2023-12-06 09:36:30', 30, 4.5)
            , (5, 1004, 90012, 2008, '2023-12-06 18:01:48', '2023-12-06 18:02:48', '2023-12-06 18:42:20', 46, 4.7)
            , (6, 1004, 90018, 2004, '2023-12-07 08:01:43', '2023-12-07 08:04:46', '2023-12-07 08:53:41', 52, 4.8)
            , (7, 1007, 90002, 2021, '2023-12-08 20:01:39', '2023-12-08 20:06:33', '2023-12-08 20:29:51', 42, 4.9)
            , (8, 1006, 90017, 2016, '2023-12-08 08:30:36', '2023-12-08 08:34:32', '2023-12-08 09:12:21', 48, 4.1)
) AS table_name(id, uuid, order_id, driver_id, order_time, start_time, finish_time, fare, grade)
)
2- 代码实现
-- 1. 数据处理: 获取等待时间,调度时间, 时间类型
SELECT 
      a.order_id
    , a.event_time
    , a.end_time
    , b.order_time
    , b.start_time
    , (UNIX_TIMESTAMP(a.end_time) - UNIX_TIMESTAMP(a.event_time) ) AS wait_times -- 等待时间
    , (UNIX_TIMESTAMP(b.start_time) - UNIX_TIMESTAMP(b.order_time)) AS schedulers_times  -- 调度时间
    , (CASE
         WHEN HOUR(a.event_time) >= '07' AND HOUR(a.event_time) < '09' THEN "早高峰"
         WHEN HOUR(a.event_time) >= '09' AND HOUR(a.event_time) < '17' THEN "工作时间"
         WHEN HOUR(a.event_time) >= '17' AND HOUR(a.event_time) < '20' THEN "晚高峰"
         ELSE "休息时间" END ) as time_type
FROM t_taxi_info a 
JOIN t_order_info b 
ON a.order_id = b.order_id
;
order_idevent_timeend_timeorder_timestart_timewait_timesschedulers_timestime_type
900042023-12-04 11:00:122023-12-04 11:00:422023-12-04 11:00:422023-12-04 11:05:2230280工作时间
900112023-12-05 21:00:222023-12-05 21:01:062023-12-05 21:01:062023-12-05 21:04:0244176休息时间
900082023-12-05 19:01:022023-12-05 19:01:522023-12-05 19:01:522023-12-05 19:08:5250420晚高峰
900062023-12-06 09:01:062023-12-06 09:01:362023-12-06 09:01:362023-12-06 09:03:3630120工作时间
900122023-12-06 18:01:082023-12-06 18:01:482023-12-06 18:01:482023-12-06 18:02:484060晚高峰
900182023-12-07 08:01:162023-12-07 08:01:432023-12-07 08:01:432023-12-07 08:04:4627183早高峰
900022023-12-08 20:01:122023-12-08 20:01:392023-12-08 20:01:392023-12-08 20:06:3327294休息时间
900172023-12-08 08:30:182023-12-08 08:30:362023-12-08 08:30:362023-12-08 08:34:3218236早高峰
-- 2. 计算各时间段的叫车量,等待时间平均值,调度时间平均值
SELECT 
      time_type
    , COUNT(order_id) AS get_taxi_num
    , SUM(wait_times)/COUNT(order_id) AS wait_times_avg
    , SUM(schedulers_times)/COUNT(order_id) AS schedulers_times_avg
FROM (
    SELECT 
          a.order_id
        , a.event_time
        , a.end_time
        , b.order_time
        , b.start_time
        , (UNIX_TIMESTAMP(a.end_time) - UNIX_TIMESTAMP(a.event_time) ) AS wait_times -- 等待时间
        , (UNIX_TIMESTAMP(b.start_time) - UNIX_TIMESTAMP(b.order_time)) AS schedulers_times  -- 调度时间
        , (CASE
             WHEN HOUR(a.event_time) >= '07' AND HOUR(a.event_time) < '09' THEN "早高峰"
             WHEN HOUR(a.event_time) >= '09' AND HOUR(a.event_time) < '17' THEN "工作时间"
             WHEN HOUR(a.event_time) >= '17' AND HOUR(a.event_time) < '20' THEN "晚高峰"
             ELSE "休息时间" END ) as time_type
    FROM t_taxi_info a 
    JOIN t_order_info b 
    ON a.order_id = b.order_id
) t1
GROUP BY time_type
;
time_typeget_taxi_numwait_times_avgschedulers_times_avg
休息时间235.5235.0
工作时间230.0200.0
早高峰222.5209.5
晚高峰245.0240.0
end
  • 25
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值