SQL 刷题/【携程】统计门店每日补位班次 2 小时内确认率 Top1
上一题下一题困难通过率 0%

【携程】统计门店每日补位班次 2 小时内确认率 Top1

聚合函数窗口函数CASE WHEN排行榜面试真题

题目描述

来源:携程 SQL 面试真题

某即时零售平台在晚高峰前,会给门店的骑手补位班次发送“待确认邀约”。同一个班次可能会在不同时间多次推送给不同骑手,也可能被同一骑手多次看到。运营团队希望统计指定日期范围内、每个门店每天最终成功开班的补位班次在发出邀约后的 2 小时内确认情况,并找出门店当日表现最好的补位班次。

数据表

relief_shifts 补位班次主表

字段类型说明
shift_idBIGINT补位班次 ID,主键
store_idBIGINT门店 ID
shift_dateDATE班次日期
shift_periodVARCHAR(20)班次时段,例如 lunch、afternoon、dinner、night
required_rider_countINT该班次需要补位的骑手数量
published_atDATETIME班次首次发出邀约的时间
shift_statusVARCHAR(20)班次最终状态,例如 filled、cancelled

shift_invite_responses 班次邀约反馈表

字段类型说明
response_idBIGINT反馈记录 ID,主键
shift_idBIGINT所属补位班次 ID
rider_idBIGINT骑手 ID
invited_atDATETIME该次邀约发出时间
responded_atDATETIME骑手反馈时间,NULL 表示未反馈
response_statusVARCHAR(20)反馈结果,例如 accepted、declined、ignored

业务规则

  1. 只统计 shift_date 在 2025-08-15 到 2025-08-17 之间且 shift_status = 'filled' 的补位班次。
  2. 对同一个 shift_id + rider_id,只保留 invited_at 最早的那条记录作为该骑手的首轮邀约记录;如果时间相同,使用 response_id 更小的记录保证结果稳定。
  3. 2 小时内确认成功必须同时满足:response_status = 'accepted'、responded_at 不为 NULL、responded_at 不晚于 invited_at 后 2 小时。
  4. accepted_in_2h_rider_count 是班次内满足条件的不同骑手数。
  5. acceptance_rate = accepted_in_2h_rider_count / required_rider_count,四舍五入保留 2 位小数。
  6. 每个 store_id + shift_date 只保留 acceptance_rate 最高的一个班次。
  7. 如果确认率相同,依次比较 accepted_in_2h_rider_count 更大、published_at 更早、shift_id 更小。

输出字段

字段说明
store_id门店 ID
shift_date班次日期
shift_id补位班次 ID
shift_period班次时段
required_rider_count需要补位人数
accepted_in_2h_rider_count2 小时内确认成功的骑手数
acceptance_rate2 小时内确认率,四舍五入保留 2 位小数

结果按 shift_date 升序、store_id 升序、shift_id 升序排列。

数据样例

当前运行环境
shift_idPKBIGINTstore_idBIGINTshift_dateDATEshift_periodVARCHAR(20)required_rider_countINTpublished_atDATETIMEshift_statusVARCHAR(20)
10011012025-08-15lunch32025-08-15 08:00:00filled
10021012025-08-15dinner22025-08-15 09:00:00filled
10031012025-08-16lunch22025-08-16 08:00:00filled
10041012025-08-16afternoon32025-08-16 07:00:00filled
10051012025-08-17night22025-08-17 08:00:00cancelled
20012022025-08-15lunch22025-08-15 08:00:00filled
20022022025-08-15dinner42025-08-15 07:30:00filled
20032022025-08-17night22025-08-17 09:00:00cancelled
输入数据显示 8 / 10
SQL 编辑器正在保存草稿...
正在加载 SQL 编辑器...

运行你的 SQL 查询后,结果将显示在这里