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

各城市最大同时等车人数

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

这题很多题解没有考虑到题目说结束的三种情况,只是牛客的用例少,导致能通过。

拿到这个题目,一看就是那种计算同时在线的题目,那么就需要找到每个人的进入时间和出去时间,在本题的场景内是打车时间-取消打车|取消等待|上车时间

打车时间就是event_time这个没有什么疑问。

然后结束时间有三种情况:

1. 用户上车了:start_time不为空

2. 用户打到车了,但是上车前却取消了:start_time为空,finish_time不为空

3. 用户没达到车,订单被取消了:finish_time为空,end_time不为空

所以 我们可以连利这三种

IFNULL(start_time, ifnull(finish_time, end_time))

本题还有一个易错点,也是我做的时间搞错的,就是窗口函数在order by的时候一定要加上 flag desc(别看union的时候你是按顺序union的,但是在窗口函数的使用的时候order by语句已经把东西按日期整理了新顺序,先减后加这会导致错误的结果)



with temp as 
(
	select 
		city,
		event_time,
	 	order_id,
		1 flag
	from tb_get_car_record
	union all
	select 
		city,
		IFNULL(start_time, ifnull(finish_time, end_time)) event_time,
		 t1.order_id,
		-1 flag
	from tb_get_car_record t1
	left join tb_get_car_order t2
	on t1.order_id = t2.order_id
)
select 
	city,
	max(累积) max_wait_uv
from 
(
	select 
		city,
		event_time,
		flag,
		sum(flag) over(partition by city, DATE(event_time) order by event_time, flag DESC) 累积
	from temp
	where 
		DATE_FORMAT(event_time, '%Y-%m')='2021-10' 
) a
group by city
order by max_wait_uv, city

全部评论

相关推荐

不愿透露姓名的神秘牛友
2025-12-19 16:50
点赞 评论 收藏
分享
2025-12-14 11:43
黑龙江大学 Java
用微笑面对困难:确实比较烂,可以这么修改:加上大学的qs排名,然后大学简介要写一些,然后硕士大学加大加粗,科研经历第一句话都写上在复旦大学时,主要负责xxxx,简历左上角把学校logo写上,建议用复旦大学的简历模板
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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