我有一个这样的简单表(实际的x-千值):
在这张桌子上,我正在进行查询以获得差异(工作正常):
select
EL.sensor_id,
EL.value_id,
EL.time,
EL.value,
if( @lastSN = EL.sensor_id, EL.value - @lastValue, 0000.00 ) as diff,
@lastSN := EL.sensor_id,
@lastValue := EL.value
from
data_test_debug EL,
( select @lastSN := 0,
@lastValue := 0 ) SQLVars
where EL.value_id = "gas"
order by
EL.sensor_id,
EL.time
结果如下:
现在我遇到了问题,因为我必须对差异数据进行分组。
按天或月或周或年(用于表示图表中的数据)
我试过这样的事情:
select MONTHNAME(EL.time), SUM(EL.diff)
FROM data_test_debug EL,
(select
EL.sensor_id,
EL.value_id,
EL.time,
EL.value,
if( @lastSN = EL.sensor_id, EL.value - @lastValue, 0000.00 ) as diff,
@lastSN := EL.sensor_id,
@lastValue := EL.value
from
data_test_debug EL,
( select @lastSN := 0,
@lastValue := 0 ) SQLVars
where EL.value_id = "gas"
order by
EL.sensor_id,
EL.time) AS t
GROUP BY YEAR(EL.time), MONTH(EL.time)
但是没有得到结果..
每小时收集数据,因此需要进行分组。
答案 0 :(得分:0)
不要再次加入桌子。将分组直接应用于子查询:
SELECT YEAR(time), MONTHNAME(time), SUM(diff)
FROM (select EL.sensor_id,
EL.value_id,
EL.time,
EL.value,
if(@lastSN = EL.sensor_id, EL.value - @lastValue, 0.0) as diff,
@lastSN := EL.sensor_id,
@lastValue := EL.value
FROM data_test_debug EL, (SELECT @lastSN := 0,
@lastValue := 0) SQLVars
WHERE EL.value_id = "gas"
ORDER BY EL.sensor_id, EL.time
) AS t
GROUP BY YEAR(time), MONTH(time)
通过删除您未使用的所有字段可以大大简化它,但是您可以在它开始工作后执行此操作。