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

各城市最大同时等车人数

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

一、定义等待时间

1、start_wait_time开始等待时间

始终是event_time

2、end_wait_time结束等待时间

有哪些情况呢?

(1)司机接单【前】乘客取消订单

乘客开始打车event_time→取消订单end_time】 (order_id 为 null)

(2)司机接单【后】乘客取消订单

乘客开始打车event_time→取消订单finish_time】 (start_time  为 null)

(3)正常完成订单

乘客开始打车event_time→乘客上车start_time

二、出错

使用sum(event_type) over (partition by city, date(event_time) order by event_time) 计算实时等车人数,但:如果同一时间点既有用户开始等车(+1)又有用户结束等车(-1),MySQL 的窗口函数可能无法保证严格的“先加后减”顺序。

三、解决方法

在 ORDER BY 中增加更细粒度的时间排序sum(event_type) over (partition by city,date(event_time) order by event_time,event_type DESC)

四、完整代码

with
    base as (
        select
            city,
            tb_get_car_record.uid,
            date(event_time) as day,
            event_time as start_wait_time,
            case
                when order_id is null then end_time
                when start_time is null then finish_time
                else start_time
            end as end_wait_time
        from
            tb_get_car_record
            join tb_get_car_order using (order_id)
        where
            year(event_time) = 2021
            and month(event_time) = 10
    ),
    temp as (
        select
            city,
            uid,
            start_wait_time as event_time,
            '1' as event_type
        from
            base
        union all
        select
            city,
            uid,
            end_wait_time as event_time,
            '-1' as event_type
        from
            base
        order by
            city,
            uid,
            event_time
    )
select
    city,
    max(CAST(wait_uv AS unsigned)) as max_wait_uv
from
    (
        select
            city,
            date(event_time) as event_time,
            sum(event_type) over (
                partition by
                    city,
                    date(event_time)
                order by
                    event_time,
                    event_type desc
            ) as wait_uv
        from
            temp
    ) as t1
group by
    city
order by
    max_wait_uv,
    city

全部评论

相关推荐

在下uptown:山东的哥们得好好回答 第一问题,专业技能太少了,现在写的大部分都是模型迭代过渡期的技术栈,说白了今天用明天可能就不用,多补一些看家的本事 第二个问题,项目偏学术学习体现不出工程能力,deepresearch核心在于模型自我反馈自我纠正,没体现出来,RAG本身在落地应用上就是个伪命题。 再有就是,有实习经历可以弥补学历不足,建议放到学历下面,别人筛简历可能第一眼觉得学校不过关,但第二眼有实习经历,就给你面试了,藏到后面可能就没有第二眼了
点赞 评论 收藏
分享
05-09 15:06
湘南学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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