我想计算机器的MTBF(平均故障间隔时间)。其中,event_type = 0
是机器添加或打开时,event_type= 1
是机器发生故障时。 MTBF = Time/number_of_failure
。
我的查询是计算MTBF,方法是将每个时间段除以所有数据集中的失败总数,而不是发生的失败总数
我希望我能顺利解释这个问题
下表中MTBF的预期结果:
machine_type_id time machine_id event_type MTBF
6298 0 6640223 0 0
28602 1.82296E+12 6640223 1 1.82296E+12
28610 1.82396E+12 6640223 0 1.82396E+12
33362 2.23891E+12 6640223 1 1.11946E+12
33409 2.2393E+12 6640223 0 1.11965E+12
我的查询:
select m.machine_id, m.time , m.time/sum(tet.total_failure) as MTBF
from
(
select machine_id, time, count(*) as total_failure from machine_events
where event_type=1
group by machine_id, time
) as tet inner join machine_events as m on m.machine_id = tet.machine_id
group by m.machine_id, m.time
order by m.time
我希望你能提供一个简单的查询,这样我就可以编写通过time
,machine id
来获取MTBF
的函数。
答案 0 :(得分:2)
你可以试试这个。
SELECT
m.machine_id,
m.time,
m.time / CASE WHEN ( SUM (m.event_type % 2) OVER( PARTITION BY m.machine_id ORDER BY m.time ) ) = 0 THEN 1
ELSE ( SUM (m.event_type % 2) OVER( PARTITION BY m.machine_id ORDER BY m.time ) ) END as MTBF
FROM
machine_events m
ORDER BY
m.machine_id, m.time