题解 | 找出补位班次

找出补位班次

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

with
    lsb as (
        select
            r.store_id,
            r.shift_date,
            r.shift_id,
            r.shift_period,
            r.required_rider_count,
            count(l.rider_id) as accepted_in_2h_rider_count,
            round(count(l.rider_id) / r.required_rider_count, 2) as acceptance_rate,
            row_number() over (
                partition by
                    r.store_id,
                    r.shift_date
                order by
                    round(count(l.rider_id) / r.required_rider_count, 2) desc,
                    count(l.rider_id) desc,
                    r.published_at asc,
                    r.shift_id asc
            ) as rk
        from
            relief_shifts r
            left join (
                select
                    response_id,
                    shift_id,
                    rider_id,
                    invited_at,
                    responded_at,
                    response_status
                from
                    (
                        select
                            *,
                            row_number() over (
                                partition by
                                    shift_id,
                                    rider_id
                                order by
                                    invited_at
                            ) as rk
                        from
                            shift_invite_responses
                    ) t
                where
                    t.rk = 1
            ) l on r.shift_id = l.shift_id
        where
            r.shift_date between '2025-08-15' and '2025-08-17'
            and r.shift_status = 'filled'
            and l.response_status = 'accepted'
            and l.responded_at is not null
            and l.responded_at <= timestampadd(hour, 2, invited_at)
        group by
            r.store_id,
            r.shift_date,
            r.shift_id,
            r.shift_period,
            r.required_rider_count
    )
select
    store_id,
    shift_date,
    shift_id,
    shift_period,
    required_rider_count,
    accepted_in_2h_rider_count,
    acceptance_rate
from
    lsb
where
    lsb.rk = 1
order by
    shift_date,
    store_id,
    shift_id

全部评论

相关推荐

05-10 16:48
门头沟学院 Java
程序员小白条:主要原因,投递太晚了,快手应该早点溜了,你都从去年9月开始的,半年也差不多3月跑路了,这样的话,至少有5个以上的面试机会
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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