我有一个像这样的简单表格(真实的 x-thousand 值):
在这张表上,我正在执行查询以获取差异(效果很好):
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)
但没有期待得到结果..
数据每小时收集一次,因此需要分组。
最佳答案
不要再入 table 了。将分组直接应用于子查询:
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)
通过删除所有您不使用的字段可以大大简化它,但您可以在它开始工作后执行此操作。
关于mysql - 如何在子查询上按日/月/年分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49262862/