【京东】统计快递创建到首次发出的平均间隔
JOIN 连接聚合函数GROUP BY子查询日期函数面试真题
题目描述
来源:京东 SQL 面试真题
某物流公司需要统计快递单从创建到首次发出的平均等待时间,并将结果换算为小时。
数据表
express_tb 快递信息表
| 字段 | 类型 | 说明 |
|---|---|---|
| exp_number | VARCHAR | 快递单号,主键 |
| exp_type | VARCHAR | 快递种类 |
| out_city | VARCHAR | 快递发出城市 |
| in_city | VARCHAR | 快递邮入城市 |
| create_time | DATETIME | 快递单创建时间 |
exp_action_tb 快递运输动作表
| 字段 | 类型 | 说明 |
|---|---|---|
| exp_number | VARCHAR | 快递单号 |
| transport_type | VARCHAR | 运输类型 |
| out_time | DATETIME | 本次运输动作的发出时间,可为空 |
| in_time | DATETIME | 本次运输动作的到达时间,可为空 |
统计口径
- 同一快递单可能有多条运输动作,快递邮出时间取最早的非空
out_time。 - 单个快递的等待间隔为
首次发出时间 - create_time。 - 没有任何有效发出时间的快递不参与平均值计算。
- 先按分钟理解平均间隔,最终除以 60 换算为小时。
- 结果四舍五入保留 3 位小数。
- 没有已发出快递时输出 0。
期望输出列
| 列名 | 说明 |
|---|---|
| avg_interval_hours | 从快递单创建到首次发出的平均间隔,单位小时 |
数据样例
| exp_numberPKVARCHAR(32) | exp_typeVARCHAR(50) | out_cityVARCHAR(50) | in_cityVARCHAR(50) | create_timeDATETIME |
|---|---|---|---|---|
| JD2001 | 普通件 | 北京 | 上海 | 2022-06-01 08:00:00 |
| JD2002 | 生鲜 | 广州 | 深圳 | 2022-06-01 09:00:00 |
| JD2003 | 易碎品 | 杭州 | 成都 | 2022-06-01 10:15:00 |
| JD2004 | 文件 | 南京 | 武汉 | 2022-06-01 11:00:00 |
输入数据显示 4 / 4 行
SQL 编辑器正在保存草稿...
Ctrl + Enter 运行
正在加载 SQL 编辑器...
运行你的 SQL 查询后,结果将显示在这里