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 对并计算出它们对应的时间差。还有一个额外的问题,如果最后一个值打开,我想让它计算出 ON 时间点和当前时间之间的时间差。我知道有一种比手动使用 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 回答