3156. 员工任务持续时间和并发任务 🔒
题目描述
表:Tasks
+---------------+----------+ | Column Name | Type | +---------------+----------+ | task_id | int | | employee_id | int | | start_time | datetime | | end_time | datetime | +---------------+----------+ (task_id, employee_id) 是这张表的主键。 这张表的每一行包含任务标识,员工标识和每个任务的开始和结束时间。
编写一个解决方案来查找 每个 员工的任务 总持续时间 以及员工在任何时间点处理的 最大并发任务数。总时长应该 舍入 到最近的 整小时。
返回结果表以 employee_id
升序 排序。
结果格式如下所示。
示例:
输入:
Tasks 表:
+---------+-------------+---------------------+---------------------+ | task_id | employee_id | start_time | end_time | +---------+-------------+---------------------+---------------------+ | 1 | 1001 | 2023-05-01 08:00:00 | 2023-05-01 09:00:00 | | 2 | 1001 | 2023-05-01 08:30:00 | 2023-05-01 10:30:00 | | 3 | 1001 | 2023-05-01 11:00:00 | 2023-05-01 12:00:00 | | 7 | 1001 | 2023-05-01 13:00:00 | 2023-05-01 15:30:00 | | 4 | 1002 | 2023-05-01 09:00:00 | 2023-05-01 10:00:00 | | 5 | 1002 | 2023-05-01 09:30:00 | 2023-05-01 11:30:00 | | 6 | 1003 | 2023-05-01 14:00:00 | 2023-05-01 16:00:00 | +---------+-------------+---------------------+---------------------+
输出:
+-------------+------------------+----------------------+ | employee_id | total_task_hours | max_concurrent_tasks | +-------------+------------------+----------------------+ | 1001 | 6 | 2 | | 1002 | 2 | 2 | | 1003 | 2 | 1 | +-------------+------------------+----------------------+
解释:
- 对于员工 ID 1001:
- 任务 1 和任务 2 从 08:30 到 09:00 重叠(30 分钟)。
- 任务 7 持续时间为 150 分钟(2 小时 30 分钟)。
- 总工作小时:60(任务 1)+ 120(任务 2)+ 60(任务 3)+ 150(任务 7)- 30(重叠)= 360 分钟 = 6 小时。
- 最大并发任务:2 (重叠期间)。
- 对于员工 ID 1002:
- 任务 4 和任务 5 从 09:30 到 10:00 重叠(30 分钟)。
- 总工作时间:60 (任务 4)+ 120(任务 5)- 30(重叠)= 150 分钟 = 2 小时 30 分钟。
- 总工作小时:(舍入后):2 小时。
- 最大并发任务:2 (重叠期间)。
- 对于员工 ID 1003:
- 没有重叠的工作。
- 总工作时间:120 分钟 = 2 小时。
- 最大并发任务:1。
注意:输出表以 employee_id 升序排序。
解法
方法一:合并 + 连接
我们首先将 employee_id
的 start_time
和 end_time
合并到一个新的表 T
中,然后使用 LEAD
函数计算出每个员工的下一个任务的开始时间,接着我们将 T
表和 Tasks
表连接起来,计算出每个员工的并发任务数,最后按照 employee_id
分组,计算出每个员工的总任务时间和最大并发任务数。
相似题目:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
|