2017-10-29 15 views
1

機械のMTBF(平均故障間隔)を計算します。ここで、event_type = 0はマシンが追加されたかどうか、そしてevent_type= 1はマシンが失敗したときです。 MTBF = Time/number_of_failureMTBF(平均故障間隔)の計算

私のクエリは、期間までを起こるすべてのデータセット、失敗のない総数を各期間を取り、の障害の合計数で割ることによって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という関数を書くことができます。

答えて

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 
+0

私はevent_type列の名前を修正しました。 –

+0

「ゼロエラーが発生しました」と表示されました。 – jou

+0

更新されたマシンを表すデータセットにevent_type = 2がありますので、あなたの解決策の下ではそれを計算するかもしれませんが、event_type!= 2と書くと – jou