【发布时间】:2016-02-10 23:41:33
【问题描述】:
有人可以帮我完成下一个任务吗?
这里有一个问题:我们有一个历史记录表(进程的状态变化),我们需要计算一个进程处于特定状态的时间(以每天小时为单位)。这是历史表的结构:
ID| ProcessId| CreatedDate | Status
-------------------------------------------
1 | Process1 | 2016-01-09 06:30:00 | UP
2 | Process1 | 2016-01-09 12:30:00 | UP
3 | Process1 | 2016-01-09 18:30:00 | DOWN
4 | Process1 | 2016-01-10 00:30:00 | UP
5 | Process2 | 2016-01-08 18:30:00 | UP
6 | Process2 | 2016-01-09 00:30:00 | DOWN
7 | Process2 | 2016-01-09 06:30:00 | DOWN
8 | Process2 | 2016-01-09 12:30:00 | DOWN
9 | Process2 | 2016-01-09 18:30:00 | DOWN
10| Process2 | 2016-01-10 00:30:00 | UP
11| Process2 | 2016-01-10 06:30:00 | UP
12| Process2 | 2016-01-10 12:30:00 | DOWN
13| Process2 | 2016-01-10 18:30:00 | DOWN
14| Process2 | 2016-01-11 00:30:00 | DOWN
15| Process2 | 2016-01-11 06:30:00 | DOWN
因此,我们需要创建一个视图/表,例如:
ProcessId | Status | Date | TimeSpentInStatusInDays
----------------------------------------------------------
Process1 | UP | 2016-01-09 | 12h 00m
Process1 | DOWN | 2016-01-09 | 05h 30m
Process1 | UP | 2016-01-10 | 00h 00m
Process1 | DOWN | 2016-01-10 | 00h 30m
Process2 | UP | 2016-01-08 | 05h 30m
Process2 | DOWN | 2016-01-08 | 00h 00m
Process2 | UP | 2016-01-09 | 24h 00m
Process2 | DOWN | 2016-01-09 | 00h 00m
Process2 | UP | 2016-01-10 | 12h 00m
Process2 | DOWN | 2016-01-10 | 12h 00m
Process2 | UP | 2016-01-11 | 00h 00m
Process2 | DOWN | 2016-01-11 | 06h 30m
值是例如(它们不连接到实际数据集)。
代码需要在 mySQL 中。任何帮助将不胜感激。谢谢。
【问题讨论】:
-
所以一个进程在同一天“down”之后就再也不能“up”了?
-
又可以起来了。在当前示例中,每 6 小时检查一次进程的状态,此时状态可以反映为已更改。我们基本上需要计算当天进程的上下时间。
-
我认为样本数据集不能充分代表问题的这一方面。另外,虽然我可以看到如何将一个事物的周期与另一事物相加,但我无法理解对不相加的周期求和的逻辑!?!
-
这里的要求是每天显示哪些流程处于上升和下降状态以及持续时间。虽然我能够获得状态变化之间的持续时间,但我每天都面临着打破它的挑战。理想情况下,某一时刻的数据将开始提供更真实的输入,例如每 15-30 分钟并提供流程的持续状态,逻辑将开始变得更有意义。问题是状态不会跨日期更改或在更长的时间内保持不变。假设一个流程永远不会停止,那么每天找到持续时间就成了挑战。
-
到目前为止,这是我的代码: