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

各城市最大同时等车人数

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

/*问题:请统计各个城市在2021年10月期间,单日中最大的同时等车人数。
注:   等车指从开始打车起,直到取消打车、取消等待或上车前的这段时间里用户的状态。
如果同一时刻有人停止等车,有人开始等车,等车人数记作先增加后减少。
结果按各城市最大等车人数升序排序,相同时按城市升序排序。
1.2021年10月
  [1]where
2.等车计为1 取消等车计为-1 按照时间 union,根据城市时间计算累计,取得最大值
  [1]case when 
  [2]unoin 
  [3]sum()over()  当同一时间有人等车 1 有人停止等车 -1,先+1 再 -1.即 累计时按等车状态的 逆序累计
  [4]max
[等车状态为 开始打车起] [取消时间为 1.取消打车 2.取消等待 3.上车]*/
with data2 as
(select city,sum(uv)over(partition by city order by dt,uv desc) wait_uv
from
((#等车表
select a.uid,city,event_time dt,1 uv
from tb_get_car_record a
left join tb_get_car_order b using(order_id)
where date_format(event_time,'%Y%m')='202110')
union all
#结束等车表
(select a.uid,city,
      case when order_id is null then end_time
           when mileage is null then finish_time
           else start_time end dt,-1 uv
from tb_get_car_record a
left join tb_get_car_order b using(order_id)
where date_format(event_time,'%Y%m')='202110'))data1)

select city,max(wait_uv) max_wait_uv
from data2
group by city
order by max_wait_uv,city

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务