【发布时间】:2018-08-04 15:09:34
【问题描述】:
我想计算设备的停止时间。
如果DateTime 或Class(Alarm=TRUE)=Class(Working=FALSE) 用于同一设备
然后Stopped Time=Working(TRUE)-Working(FALSE) 用于该设备。
【问题讨论】:
标签: mysql calculated-columns spotfire
我想计算设备的停止时间。
如果DateTime 或Class(Alarm=TRUE)=Class(Working=FALSE) 用于同一设备
然后Stopped Time=Working(TRUE)-Working(FALSE) 用于该设备。
【问题讨论】:
标签: mysql calculated-columns spotfire
以下解决方案取决于您描述的数据的一致性。任何偏差都可能导致您(非常)不同的解决方案。
首先使用“OVER”语句查找下一个日期和时间值:
[Next DateTime] = First([DateTime]) OVER (Next([DateTime],1))
注意:我使用 'First' 作为聚合,但任何事情都可以,因为只返回一个值。
接下来,求时间差:
[Time Difference] = DateDiff("minute",[DateTime],[Next DateTime])
接下来,找到满足条件的行:
[Check Conditions] = (Concatenate([Class] & [Value]) OVER ([DateTime])="WorkingFalse, AlarmTrue") and ([Class]="Alarm")
最后,显示正确行的停止时间:
[Stopped Time] = If([Check Conditions],[Time Difference],NULL)
【讨论】:
嗯,我认为当您说设备停止时间时,您的意思是停机时间,即设备不工作或空闲的时间。
值得深思
准确衡量这个时间段取决于几个因素,
设备是否会在每次因任何原因启动和停止时报告/存储时间戳。如果不是,则很难跟踪,例如,如果设备报告了开始时间并且只是在两者之间挂起或电源出现故障会发生什么,看起来设备正在工作,但实际上并非如此。
现在假设设备报告开始和停止时间,并且还可能定期发送设备数据,例如,每 1 分钟您可以在计算停机时间时执行以下操作。
如果设备处于启动状态则
当前时间-开始时间=总时间
样本总数(每 1 分钟接收一次)= 设备工作的总分钟数
所以总时间 - 数据样本数 = 空闲时间。
希望这是有道理且有帮助的。
【讨论】: