1

さて、次のようなテーブルがあります。

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 のペアを取得し、対応する時間差を計算できるクエリを作成しようとしました。最後の値がオンの場合、オンの時点と現在の時刻の時間差を計算したいという追加の問題があります。手動で php を使用してテーブルの結果を分析するよりも簡単な方法があることはわかっています。

どうもありがとう

4

1 に答える 1

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 に処理させる方が簡単です。

于 2012-04-17T00:26:54.580 に答える