题解 | #各城市最大同时等车人数#

各城市最大同时等车人数

http://www.nowcoder.com/practice/f301eccab83c42ab8dab80f28a1eef98

# 每个城市,每天内的订单按时间从小到大排序
#
# 开始打车的时间点为1
# 取消打车、取消等待、上车的时间点分别为-1

select city,
       max(wait_uv) max_wait_uv
from (
         SELECT time,
                city,
                SUM(人数变化) OVER (ORDER BY time ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) wait_uv
         FROM ( # 开始打车的时间点
                  SELECT city,
                         event_time time,
                         1          '人数变化'
                  FROM tb_get_car_record
                  UNION ALL
                  # 未成功打车并停止打车的事件点
                  SELECT city,
                         end_time time,
                         -1       '人数变化'
                  FROM tb_get_car_record
                  WHERE order_id IS NULL
                  UNION ALL
                  #成功打到车但取消等车的时间点
                  SELECT city,
                         finish_time time,
                         -1          '人数变化'
                  FROM tb_get_car_order
                           JOIN tb_get_car_record USING (order_id)
                  WHERE start_time IS NULL
                  UNION ALL
                  # 成功打到车并上车的时间点
                  SELECT city,
                         start_time time,
                         -1         '人数变化'
                  FROM tb_get_car_order
                           JOIN tb_get_car_record USING (order_id)
                  WHERE start_time IS NOT NULL
                  ORDER BY time ASC, 人数变化 DESC
              ) table_1
     ) table_2
where substr(time,1,7)= '2021-10'
group by city
ORDER BY max_wait_uv
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务