计算MTBF(平均故障间隔时间)

时间:2017-10-29 20:03:03

标签: sql sql-server

我想计算机器的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

我希望你能提供一个简单的查询,这样我就可以编写通过timemachine id来获取MTBF的函数。

1 个答案:

答案 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