题解 | #各城市最大同时等车人数#
各城市最大同时等车人数
https://www.nowcoder.com/practice/f301eccab83c42ab8dab80f28a1eef98
# 请统计各个城市在2021年10月期间,单日中最大的同时等车人数 # 筛选条件2021年10月 # 分组条件:city # 等车指从开始打车起,直到取消打车、取消等待或上车前的这段时间里用户的状态 # 等车时间段:event_time to finish_time/start_time # 计算每天的同时等车人数,再求每天最大的同时等车人数 # 再求2021年10月的单日中最大的同时等车人数,再按城市分组 # 如何计算每天同时等车的人数? # 如果同一时刻有人停止等车,有人开始等车,等车人数记作先增加后减 # 开始等车:event_time 结束等车: case when mileage is null then finish_time else start_time # 将所有开始等车时刻和结束等车时刻升序排序, 开始时间标记为1,结束时间标记为-1, unbounded preceding 滚动求和 select t2.city as city , max(uv) as max_wait_uv from( -- 2021-10月期间每个城市每天的每个时刻的等车人数 select date(t1.tick) as dt , t1.city , sum(flag) over (partition by t1.city, date(t1.tick) order by t1.tick, t1.flag desc) as uv from( select cr.event_time as tick , cr.city , 1 as flag from tb_get_car_order as co inner join tb_get_car_record as cr on co.order_id = cr.order_id union all select (case when co.mileage is not null then co.start_time else co.finish_time end) as tick , cr.city , -1 as flag from tb_get_car_order as co inner join tb_get_car_record as cr on co.order_id = cr.order_id ) as t1 where date_format(t1.tick, "%Y%m") = 202110 ) as t2 group by t2.city order by max_wait_uv, city