2012-03-14 2 views
1

にオンとオフエンジンのための時間を計算する私はMySQLで8件のデータを持っている...方法例えばmysqlの

id  car  time        engine 
1  BMW  2012-02-25 04:00:00    off 
2  BMW  2012-02-25 04:02:44    on 
3  BMW  2012-02-25 04:06:22    off 
4  BMW  2012-02-25 04:10:11    off 
5  BMW  2012-02-25 04:15:00    on 
6  BMW  2012-02-25 04:20:00    on 
7  BMW  2012-02-25 04:25:00    off 
8  BMW  2012-02-25 04:30:00    off 

私はこのようなデータを出力するようにしたい:

車オフエンジン:2012- 02-25 04:00:00継続時間:00:02:44
車外エンジン:2012-02-25 04:06:22継続時間:00:03:49
車外エンジン:2012-02-25 04 :25:00時間:00:05:00

i co nfused私のデータに私のオフエンジンの時間を計算する方法を... ...私のprobleを解決するために助けてください

+2

あなたはエンジン時間をまとめてほしいですか? – Teja

+1

データモデルが不明です。各行は、エンジンの状態の_サンプル、または特定の遷移を表していますか? – Alnitak

+0

計算する時間を正確に定義します。また、何を試しましたか? –

答えて

0
SELECT CONCAT('car off engine',A.time,'duration :',SEC_TO_TIME(UNIX_TIMESTAMP(A.time)-UNIX_TIMESTAMP(B.time))) 
FROM 
(SELECT * FROM data WHERE engine='on' ORDER BY time) A, 
(SELECT * FROM data WHERE engine='off' ORDER BY time) B 
WHERE A.id+1=B.id; 
+0

あなたは深刻ですか? –

+0

いいえ..まったく..私はこの答えを入力していました...何らかの理由で私の机を離しました。私が戻ってきたら、2つの投票を受け取りました:... – Teja

+1

あなたを止めていることそれを編集することから? –

0

あなたは車がオフ」のリストを与えられた時間の合計を計算したいしている場合これらのタイムスタンプを昇順に並べ替えてから、オフ時間の合計を計算してオフ時間を計算したい場合は、&をオンにします。

これは、何らかのプログラミング言語を使用して、順序付けられた(時間で)オフとオンのリストを反復することによって行うことができます。 「オフ」に遭遇すると、その「オフ」オカレンスと次の「オン」オカレンスとの間の経過時間を得る。これらの時間の合計は、あなたの合計オフ時間です。または、反復処理を行っている間に経過した時間を出力するだけで、各オフ後に車がオフになった時間を確認することができます。

+0

これはmysqlの回答ではありません –

0

これは、各行が有効であることを時間を与えるだろう -

SELECT d1.*, SEC_TO_TIME(UNIX_TIMESTAMP(d2.time)-UNIX_TIMESTAMP(d1.time)) AS duration 
FROM data d1 
INNER JOIN data d2 
    ON d1.id + 1 = d2.id 
ORDER BY d1.id ASC; 

任意のさらなる我々はあなたが必要との結果セットの詳細が必要になり、これを取るために。