mysql - 如何在子查询上按日/月/年分组

标签 mysql sql grouping

我有一个像这样的简单表格(真实的 x-thousand 值):

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)

但没有期待得到结果..

数据每小时收集一次,因此需要分组。

最佳答案

不要再入 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/

相关文章:

sql - Django:来自两个模型的多个计数

python - 根据内容对同一目录中的文件进行分组

java - Jasper Reports 中的 Excel 分组依据和大纲

mysql - 需要左连接吗? WHERE 条件的行为类似于 INNER JOIN

php - 如何通过id查询数据库中的所有条目?

php - 无法连接到 mysql 服务器(由 strato 托管)出现错误 10060

xml - 使用 XSLT 1.0 将 XML 元素根据某些条件按顺序分组到桶中

mysql - 存储生日的最佳字段是什么?

php - 如何在表单中的文本框旁边显示消息?

php - 如何用php和mysql制作注册表