-- 自关联解决
with t_base as
(
select
t1.uid,
date_format(t1.event_time,'%Y-%m-%d') as dt, -- 日期
t1.city,
t1.event_time,
case when t2.start_time is null then t2.finish_time
else t2.start_time
end as start_time -- 用finish_time兜底start_time。话说为啥mysql不支持nvl函数啊
from tb_get_car_record t1
join tb_get_car_order t2
on t1.order_id = t2.order_id
where date_format(t1.event_time,'%Y-%m') = '2021-10'
)
,t1 as
(
select
t1.uid,
t1.dt,
t1.city,
count(distinct t2.uid) as wait_uv
from t_base t1
join t_base t2 --自关联,计算等待人数
on t2.start_time between t1.event_time and t1.start_time
group by t1.uid,t1.dt,t1.city
)
select
city,
max(wait_uv) as max_wait_uv
from t1
group by city --通过城市聚合,选出最大等待人数
解题思路:
使用自关联,以某人的结束等待时间作为一个节点,统计在这个人等车阶段有多少人同时等车。通过筛选条件:某人结束等待时间在当前人的等待时间区间中。
然后根据日期和city聚合,就可以看到当前节点的等待人数,再通过city聚合选出对大值即可。

京公网安备 11010502036488号