如何在 Spotfire 或 MySql 中计算设备停止时间
How can I calculate Equipment Stopped Time in Spotfire or MySql
我想计算设备的停止时间。
如果 DateTime
的 Class(Alarm=TRUE)=Class(Working=FALSE)
相同的设备
然后 Stopped Time=Working(TRUE)-Working(FALSE)
用于该设备。
以下解决方案取决于您所描述的数据的一致性。对此的任何偏差都可能导致您找到(非常)不同的解决方案。
首先使用 '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)
Example Table
嗯,我想当你说设备停止时间时,你指的是停机时间,即设备不工作或闲置的时间。
深思
准确测量这个时间段取决于几个因素,
请问设备每次启动和停止时的时间戳report/store什么原因。如果没有那么就很难跟踪,例如如果设备报告开始时间并且只是在中间挂起或者电源故障会发生什么,看起来设备正在工作但实际上没有。
现在假设设备报告开始和停止时间,并且还可以定期发送设备数据,比如每 1 分钟您可以在计算停机时间时执行以下操作。
如果设备处于启动状态则
当前时间-开始时间=总时间
样本总数(每 1 分钟接收一次)= 设备工作的总分钟数
所以总时间 - 数据样本数 = 空闲时间。
希望说得通并且对您有所帮助。
我想计算设备的停止时间。
如果 DateTime
的 Class(Alarm=TRUE)=Class(Working=FALSE)
相同的设备
然后 Stopped Time=Working(TRUE)-Working(FALSE)
用于该设备。
以下解决方案取决于您所描述的数据的一致性。对此的任何偏差都可能导致您找到(非常)不同的解决方案。
首先使用 '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)
Example Table
嗯,我想当你说设备停止时间时,你指的是停机时间,即设备不工作或闲置的时间。
深思
准确测量这个时间段取决于几个因素,
请问设备每次启动和停止时的时间戳report/store什么原因。如果没有那么就很难跟踪,例如如果设备报告开始时间并且只是在中间挂起或者电源故障会发生什么,看起来设备正在工作但实际上没有。
现在假设设备报告开始和停止时间,并且还可以定期发送设备数据,比如每 1 分钟您可以在计算停机时间时执行以下操作。
如果设备处于启动状态则
当前时间-开始时间=总时间
样本总数(每 1 分钟接收一次)= 设备工作的总分钟数
所以总时间 - 数据样本数 = 空闲时间。
希望说得通并且对您有所帮助。