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

各城市最大同时等车人数

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

WITH base_record AS (
    # 圈出10月份的数据,并确定好开始和结束时间
    SELECT 
        r.city,
        r.event_time start_wait,
        # COALESCE替代3层CASE WHEN
        COALESCE(o.start_time, o.finish_time, r.end_time) end_wait
    FROM tb_get_car_record r
    LEFT JOIN tb_get_car_order o 
    ON r.order_id = o.order_id
    WHERE DATE(r.event_time) BETWEEN '2021-10-01' AND '2021-10-31'
),
wait_log AS (
    # 打标
    SELECT city, start_wait dt, 1 AS cnt FROM base_record
    UNION ALL
    SELECT city, end_wait, -1 FROM base_record
),
running_cnt AS (
    # 计算并发
    SELECT 
        city,
        SUM(cnt) OVER(PARTITION BY city ORDER BY dt ASC, cnt DESC) concurrent_uv # 不用按日期截断,否则跨天订单会出问题
    FROM wait_log
)
SELECT 
    city, 
    MAX(concurrent_uv) max_wait_uv
FROM running_cnt
GROUP BY city
ORDER BY max_wait_uv ASC, city ASC;

开始时间肯定是event_time,然后结束时间,如果record表中的order_id为空,那么说明没有司机接单,终止时间是record表中的end_time,如果order表中的strat_time为空,那么就是接单后取消订单,终止时间是finish_time,剩下的就是正常的,应该为start_time

全部评论

相关推荐

找工作勤劳小蜜蜂:矛盾是没有实习,就是没实战经验,公司不想要,公司不要,你就没有实习,你就进入死循环,另外你的项目不是社会现在有大量岗位存在行业用的,云存储人员早就饱和。
点赞 评论 收藏
分享
04-13 09:56
已编辑
嵌入式工程师
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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