3126. 服务器利用时间 🔒
题目描述
表:Servers
+----------------+----------+ | Column Name | Type | +----------------+----------+ | server_id | int | | status_time | datetime | | session_status | enum | +----------------+----------+ (server_id, status_time, session_status) 是这张表的主键(有不同值的列的组合)。 session_status 是 ('start', 'stop') 的 ENUM (category)。 这张表的每一行包含 server_id, status_time 和 session_status。
编写一个解决方案来查找服务器 运行 的 总时间。输出应向下舍入为最接近的 整天数。
以 任意 顺序返回结果表。
结果格式如下所示。
示例:
输入:
Servers 表:
+-----------+---------------------+----------------+ | server_id | status_time | session_status | +-----------+---------------------+----------------+ | 3 | 2023-11-04 16:29:47 | start | | 3 | 2023-11-05 01:49:47 | stop | | 3 | 2023-11-25 01:37:08 | start | | 3 | 2023-11-25 03:50:08 | stop | | 1 | 2023-11-13 03:05:31 | start | | 1 | 2023-11-13 11:10:31 | stop | | 4 | 2023-11-29 15:11:17 | start | | 4 | 2023-11-29 15:42:17 | stop | | 4 | 2023-11-20 00:31:44 | start | | 4 | 2023-11-20 07:03:44 | stop | | 1 | 2023-11-20 00:27:11 | start | | 1 | 2023-11-20 01:41:11 | stop | | 3 | 2023-11-04 23:16:48 | start | | 3 | 2023-11-05 01:15:48 | stop | | 4 | 2023-11-30 15:09:18 | start | | 4 | 2023-11-30 20:48:18 | stop | | 4 | 2023-11-25 21:09:06 | start | | 4 | 2023-11-26 04:58:06 | stop | | 5 | 2023-11-16 19:42:22 | start | | 5 | 2023-11-16 21:08:22 | stop | +-----------+---------------------+----------------+
输出:
+-------------------+ | total_uptime_days | +-------------------+ | 1 | +-------------------+
解释:
- 对于 server ID 3:
- 从 2023-11-04 16:29:47 到 2023-11-05 01:49:47: ~9.3 小时
- 从 2023-11-25 01:37:08 到 2023-11-25 03:50:08: ~2.2 小时
- 从 2023-11-04 23:16:48 到 2023-11-05 01:15:48: ~1.98 小时
- 对于 server ID 1:
- 从 2023-11-13 03:05:31 到 2023-11-13 11:10:31: ~8 小时
- 从 2023-11-20 00:27:11 到 2023-11-20 01:41:11: ~1.23 小时
- 对于 server ID 4:
- 从 2023-11-29 15:11:17 到 2023-11-29 15:42:17: ~0.52 小时
- 从 2023-11-20 00:31:44 到 2023-11-20 07:03:44: ~6.53 小时
- 从 2023-11-30 15:09:18 到 2023-11-30 20:48:18: ~5.65 小时
- 从 2023-11-25 21:09:06 到 2023-11-26 04:58:06: ~7.82 小时
- 对于 server ID 5:
- 从 2023-11-16 19:42:22 到 2023-11-16 21:08:22: ~1.43 小时
解法
方法一:使用窗口函数
我们可以使用窗口函数 LEAD
来获取每个服务器的下一个状态的时间,那么两个状态之间的时间差就是服务器的一次运行时间。最后我们将所有服务器的运行时间相加,然后除以一天的秒数,就得到了服务器的总运行天数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|