2012-04-17 32 views
1

好吧,我有一個表,看起來如下:整蠱SQL查詢

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

是數據的一個典型例子。現在我想弄清楚設備已經運行了多長時間(狀態)。我想在每組狀態{1, 0}之間使用TIMEDIFF(expr1,expr2),因爲我相信這對於這類任務來說是完美的。

我試圖創建一個查詢,我可以得到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 2012-04-17 00:36:21