棘手的SQL查询

时间:2012-04-17 00:20:07

标签: mysql 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分析表结果更简单的方法。

非常感谢

1 个答案:

答案 0 :(得分: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处理它。