如何按子日查询按天/月/年分组

时间:2018-03-13 17:59:32

标签: mysql sql grouping

我有一个这样的简单表(实际的x-千值):

enter image description here

在这张桌子上,我正在进行查询以获得差异(工作正常):

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

结果如下:

enter image description here

现在我遇到了问题,因为我必须对差异数据进行分组。

按天或月或周或年(用于表示图表中的数据)

我试过这样的事情:

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)

但是没有得到结果..

每小时收集数据,因此需要进行分组。

1 个答案:

答案 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)

通过删除您未使用的所有字段可以大大简化它,但是您可以在它开始工作后执行此操作。