with basic as
(select *
from(select uid,city,event_time as dt,1 as flag
from tb_get_car_record 

union 
select tr.uid,city,ifnull(start_time,finish_time)as dt,-1 as flag
from tb_get_car_order too
right join tb_get_car_record tr on tr.order_id = too.order_id

union
select uid,city,end_time as dt,-1 as flag
from  tb_get_car_record
where order_id is null  )a
where date_format(dt,'%Y%m')='202110')

select city,max(cnt) as max_wait_uv
from
(select city,date(dt),sum(flag) over(partition by city,date(dt) order by dt,flag desc) as cnt
from basic)b
group by city
order by max_wait_uv, city

三刷。

易错:在建立basic时不用计算order_time,因为从event_time到order_time等待的人数并没有增加;