select city,max(uv) as max_wait_uv
from(select city,t,
sum(rn) over(partition by city,date(t) order by t,rn desc) as uv
from(select city,event_time as t,1 as rn from tb_get_car_record
union all
select a.city,
ifnull(ifnull(b.start_time,b.finish_time),a.end_time) as t,
-1 as rn
from tb_get_car_record a
left join tb_get_car_order b on a.order_id=b.order_id
)c
)d
where t like '2021-10%'
group by 1
order by 2,1
【mysql】
知识点:
1、等车人数,先增加后减少
使用union all将增加和减少的记录合并,并增加rn区分(1为增加,-1为减少)
2、各城市的单日最大同时等车人数,先增加后减少
窗口函数sum(rn) over(partition by city,date(t) order by t,rn desc)
即按照city,时间t的日期部分,进行分组,然后按照时间t升序,再按照rn降序
即按照城市,单日进行分组,按照时间先后,同时间则先增加后减少,计算sum人数
最后按照city取最大值