2012-04-17 14 views
1

私は以下のように見えるの表があります。トリッキーSQLクエリ

id | status(bool) | devicename(text) | datetime (timestamp) | kwh(float) 
1 |  0  |   Light | 2012-04-17 00:40:12 | 0.6 

は、データの典型的な例です。今、デバイスがどのくらいの間オン(状態)しているかを調べたいと思います。私はTIMEDIFF(expr1,expr2)をステータスの各セット{1, 0}の間で使用したいと思っています。私はそれがこの種の仕事には完璧だと信じています。

私は1から0のペアを取得して、対応する時間差を計算できるクエリを作成しようとしました。最後の値がオンであれば、ON時刻と現在時刻の時間差を計算したいと思うという追加の問題があります。私は、手動でphpを使用してテーブルの結果を分析するよりも簡単な方法があることを知っています。

多くのおかげ

答えて

0

さて、あなたは本当にMySQLの中でそれをしたい場合:

SET @total = 0, @lasttime = 0, @laststatus = 0; 
SELECT IF(`status`=0, 
      @total := IF(@lasttime=0, 
         0, 
         @total+TIMEDIFF(`datetime`,@lasttime) 
     ), 
      @lasttime := `datetime` 
     ), (@laststatus := `status`) FROM `table`; 
SET @total = @total + IF(@laststatus=1,TIMEDIFF(NOW(),@lasttime),0); 
SELECT @total AS `result` 

は、正直なところ、それだけですべての行を選択して、PHPのプロセス、それをできるように容易になるだろう。

+0

誠実で迅速な対応に感謝します。私は長い間それに触れておらず、基本の多くを忘れてしまったので、そのSQLの多くを認識していません。乾杯 – mlrob