【发布时间】:2019-04-17 01:23:15
【问题描述】:
当机器运行但没有运行任何负载时,我需要找出丢失的持续时间。该机器能够同时运行多个负载,这会产生大量重叠的日期时间。
我的任务的甘特图说明:
示例表结构
+-----------+------+-------+---------------------+---------------------+-----------+
| Equipment | Type | State | Tracked_inTIME | Tracked_outTIME | Load_Type |
+-----------+------+-------+---------------------+---------------------+-----------+
| A1 | MACH | UP | 2018-11-13 08:00:00 | 2018-11-13 10:00:00 | NULL |
| A1 | LOAD | NULL | 2018-11-13 08:20:00 | 2018-11-13 09:43:00 | PROD |
| A1 | LOAD | NULL | 2018-11-13 08:22:30 | 2018-11-13 09:55:00 | PROD |
| A1 | LOAD | NULL | 2018-11-13 08:30:00 | 2018-11-13 10:11:00 | PROD |
| A1 | MACH | DOWN | 2018-11-13 10:00:00 | 2018-11-13 10:35:00 | NULL |
| A1 | MACH | UP | 2018-11-13 10:35:00 | 2018-11-13 15:11:00 | NULL |
| A1 | LOAD | NULL | 2018-11-13 11:00:00 | 2018-11-13 11:51:00 | PROD |
| A1 | LOAD | NULL | 2018-11-13 11:25:00 | 2018-11-13 11:55:00 | PROD |
| A1 | LOAD | NULL | 2018-11-13 12:05:00 | 2018-11-13 14:11:00 | PROD |
| A1 | LOAD | NULL | 2018-11-13 12:25:00 | 2018-11-13 13:05:00 | PROD |
| A1 | LOAD | NULL | 2018-11-13 13:45:00 | 2018-11-13 15:11:00 | PROD |
| A2 | MACH | UP | 2018-11-13 08:00:00 | 2018-11-13 14:05:00 | NULL |
| A2 | LOAD | NULL | 2018-11-13 08:00:00 | 2018-11-13 14:05:00 | PROD |
+-----------+------+-------+---------------------+---------------------+-----------+
错误的输出(列:Gapduration = 40,应该为 0,因为机器仍在运行负载)
+----+-------+---------------------+---------------------+---------------------+----------------------+-------------+
| EQ | State | EQ_inTIME | EQ_outTIME | LOAD_inTIME | LOAD_outTIME | GapDuration |
+----+-------+---------------------+---------------------+---------------------+----------------------+-------------+
| A1 | UP | 2018-11-13 08:00:00 | 2018-11-13 10:00:00 | 2018-11-13 08:20:00 | 2018-11-13 09:43:00 | 20 |
| A1 | UP | 2018-11-13 08:00:00 | 2018-11-13 10:00:00 | 2018-11-13 08:22:30 | 2018-11-13 09:55:00 | 0 |
| A1 | UP | 2018-11-13 08:00:00 | 2018-11-13 10:00:00 | 2018-11-13 08:30:00 | 2018-11-13 10:11:00 | 0 |
| A1 | DOWN | 2018-11-13 10:00:00 | 2018-11-13 10:35:00 | 2018-11-13 08:30:00 | 2018-11-13 10:11:00 | 0 |
| A1 | UP | 2018-11-13 10:35:00 | 2018-11-13 15:11:00 | 2018-11-13 11:00:00 | 2018-11-13 11:51:00 | 25 |
| A1 | UP | 2018-11-13 10:35:00 | 2018-11-13 15:11:00 | 2018-11-13 11:25:00 | 2018-11-13 11:55:00 | 0 |
| A1 | UP | 2018-11-13 10:35:00 | 2018-11-13 15:11:00 | 2018-11-13 12:05:00 | *2018-11-13 14:11:00 | 10 |
| A1 | UP | 2018-11-13 10:35:00 | 2018-11-13 15:11:00 | 2018-11-13 12:25:00 | 2018-11-13 13:05:00 | 0 |
| A1 | UP | 2018-11-13 10:35:00 | 2018-11-13 15:11:00 | 2018-11-13 13:45:00 | 2018-11-13 15:11:00 | 40 |
| A2 | UP | 2018-11-13 08:00:00 | 2018-11-13 14:05:00 | 2018-11-13 08:00:00 | 2018-11-13 14:05:00 | 0 |
+----+-------+---------------------+---------------------+---------------------+----------------------+-------------+
- 输出是通过执行自联接以将加载时间范围绑定到设备状态而得出的。
- 每次设备状态变化第一行的load_inTIME与device_inTIME比较
使用 lag() 函数将 load_inTIME 的后续行与前一个 load_outTIME 进行比较
我遇到的主要问题是有一个加载时间范围(标有 *),它跨越了多个加载持续时间,我的计算没有考虑到
有什么建议吗?
【问题讨论】:
-
这台机器好像可以同时运行多个负载?有什么算法吗?有什么限制吗?设置预先预测的作业开始/作业结束collums会很好
-
我不明白甘特图上的红色是什么,也不知道你想要什么结果。
-
对不起。红色代表机器停机的持续时间。我试图找出没有负载进入机器的持续时间,即使机器处于运行状态(启动状态)。
标签: sql sql-server tsql sql-server-2012