#P5297. 第3题-当月新驿手挂线合计
-
1000ms
Tried: 0
Accepted: 0
Difficulty: 5
所属公司 :
荣耀
时间 :2026年8月25日
算法与标签>SQL
第3题-当月新驿手挂线合计
No testdata at current.
解题思路
本题使用SQL中的筛选、去重、连接和分组聚合算法。
首先从courier_sheet连接zone_dim,筛选片区名为杭湾的记录,并要求first_done位于2022年3月或4月。由于同一驿手在档案表中可能有多天出勤记录,因此按照驿手和首单月份进行去重,得到每个月的“当月新驿手”。
题目内容
驿站调度台要看指定月份里「当月才跑通首单」的驿手,在当月一共挂了多久线。库里有三张表:驿手档案、当日挂线时长、片区维表。片区名、日期、表名与字段名都按库里的原文使用。
规则如下:
- 只统计片区名为
杭湾的驿手。 - 「当月新驿手」指:首次完成单据的日期
first_done落在该自然月内。 - 对
2022年3月和4月分别汇总:这些新驿手在当月各条挂线记录的hang_hr之和(单位:小时)。 - 输出月份与合计时长,时长小数点后保留
4位。
驿手档案:courier_sheet
| work_day | courier_id | zone_id | first_done |
|---|---|---|---|
2022-03-01 |
21 |
20001 |
2022-03-01 |
22 |
2019-05-06 |
||
2022-03-02 |
24 |
2022-03-01 |
|
26 |
|||
2022-04-01 |
33 |
2022-04-01 |
|
34 |
|||
2022-04-05 |
38 |
20002 |
2021-08-11 |
work_day 是出勤日,first_done 是该驿手第一次完成单据的日期。完整行见输入中的 INSERT。
挂线时长:shift_hour
| work_day | courier_id | hang_hr |
|---|---|---|
2022-03-01 |
21 |
2.4 |
2022-03-02 |
24 |
4.1 |
26 |
5.0 |
|
2022-04-01 |
33 |
3.2 |
34 |
4.8 |
每人每天至多一行,与档案表的出勤日、驿手编号对应。
片区维表:zone_dim
| zone_id | zone_name |
|---|---|
20001 |
杭湾 |
20002 |
吴门 |
20003 |
甬江 |
查询应返回:
| month | hang_hr |
|---|---|
2022-03 |
(11.5000) |
2022-04 |
(8.0000) |
输入描述
输入是一段可执行的 SQL:创建并填充 courier_sheet、shift_hour、zone_dim。表名、字段名、片区中文名 杭湾/吴门/甬江 均须按原文使用。
输出描述
输出两行,用 | 分隔月份与合计挂线时长。月份写成 YYYY-MM;时长保留四位小数并加括号。先 3 月再 4 月。
样例1
输入
drop table if exists courier_sheet;
CREATE TABLE courier_sheet(
work_day date NOT NULL,
courier_id int(10) NOT NULL,
zone_id int(10) NOT NULL,
first_done date NOT NULL
);
INSERT INTO courier_sheet VALUES('2022-3-1', 21, 20001, '2022-3-1');
INSERT INTO courier_sheet VALUES('2022-3-1', 22, 20001, '2019-5-6');
INSERT INTO courier_sheet VALUES('2022-3-1', 23, 20001, '2021-1-5');
INSERT INTO courier_sheet VALUES('2022-3-2', 24, 20001, '2022-3-1');
INSERT INTO courier_sheet VALUES('2022-3-2', 25, 20001, '2020-7-10');
INSERT INTO courier_sheet VALUES('2022-3-2', 26, 20001, '2022-3-1');
INSERT INTO courier_sheet VALUES('2022-3-3', 27, 20001, '2018-4-1');
INSERT INTO courier_sheet VALUES('2022-3-3', 28, 20001, '2017-2-10');
INSERT INTO courier_sheet VALUES('2022-3-3', 29, 20001, '2017-3-18');
INSERT INTO courier_sheet VALUES('2022-3-3', 30, 20001, '2015-9-28');
INSERT INTO courier_sheet VALUES('2022-4-1', 31, 20001, '2021-8-1');
INSERT INTO courier_sheet VALUES('2022-4-1', 32, 20001, '2021-8-1');
INSERT INTO courier_sheet VALUES('2022-4-1', 33, 20001, '2022-4-1');
INSERT INTO courier_sheet VALUES('2022-4-1', 34, 20001, '2022-4-1');
INSERT INTO courier_sheet VALUES('2022-4-2', 35, 20001, '2019-3-3');
INSERT INTO courier_sheet VALUES('2022-4-3', 36, 20001, '2021-4-10');
INSERT INTO courier_sheet VALUES('2022-4-4', 37, 20001, '2022-1-10');
INSERT INTO courier_sheet VALUES('2022-4-5', 38, 20002, '2021-8-11');
INSERT INTO courier_sheet VALUES('2022-4-5', 39, 20002, '2018-5-2');
INSERT INTO courier_sheet VALUES('2022-4-5', 40, 20002, '2018-5-2');
drop table if exists shift_hour;
CREATE TABLE shift_hour(
work_day date NOT NULL,
courier_id varchar(10) NOT NULL,
hang_hr float(6, 1) NOT NULL
);
INSERT INTO shift_hour VALUES('2022-3-1', 21, 2.4);
INSERT INTO shift_hour VALUES('2022-3-1', 22, 1.0);
INSERT INTO shift_hour VALUES('2022-3-1', 23, 1.5);
INSERT INTO shift_hour VALUES('2022-3-2', 24, 4.1);
INSERT INTO shift_hour VALUES('2022-3-2', 25, 3.0);
INSERT INTO shift_hour VALUES('2022-3-2', 26, 5.0);
INSERT INTO shift_hour VALUES('2022-3-3', 27, 3.9);
INSERT INTO shift_hour VALUES('2022-3-3', 28, 2.8);
INSERT INTO shift_hour VALUES('2022-3-3', 29, 6.0);
INSERT INTO shift_hour VALUES('2022-3-3', 30, 4.4);
INSERT INTO shift_hour VALUES('2022-4-1', 31, 2.3);
INSERT INTO shift_hour VALUES('2022-4-1', 32, 4.9);
INSERT INTO shift_hour VALUES('2022-4-1', 33, 3.2);
INSERT INTO shift_hour VALUES('2022-4-1', 34, 4.8);
INSERT INTO shift_hour VALUES('2022-4-2', 35, 6.5);
INSERT INTO shift_hour VALUES('2022-4-3', 36, 1.9);
INSERT INTO shift_hour VALUES('2022-4-4', 37, 8.2);
INSERT INTO shift_hour VALUES('2022-4-5', 38, 5.3);
INSERT INTO shift_hour VALUES('2022-4-5', 39, 4.8);
INSERT INTO shift_hour VALUES('2022-4-5', 40, 3.9);
drop table if exists zone_dim;
CREATE TABLE zone_dim (
zone_id int(10) NOT NULL,
zone_name varchar(10) NOT NULL
);
INSERT INTO zone_dim VALUES(20001, '杭湾');
INSERT INTO zone_dim VALUES(20002, '吴门');
INSERT INTO zone_dim VALUES(20003, '甬江');
输出
2022-03|(11.5000)
2022-04|(8.0000)
说明
杭湾对应 zone_id=20001。
3月新驿手:first_done落在2022-03的21、24、26。当月挂线 2.4+4.1+5.0=11.5,写成(11.5000)。其余杭湾驿手首单都更早,不算新驿手。4月新驿手:33、34,当月挂线 3.2+4.8=8.0,写成(8.0000)。38~40是吴门,不计入。
请从“运行结果”或“历史提交”选择一条记录并点击「开始AI分析」
选择提交后点击「开始AI分析」