MySQL-按时间间隔和平均值对行进行分组

时间:2018-11-15 16:48:53

标签: mysql

我在MySQL DB中有一个表,其中的行每分钟获取一次数据。我想将这些行按平均值15分钟分组

我将日期存储为DATEFORMAT。

我有一个查询,将它们按1小时分组,但是我无法在15分钟内完成这项工作

select machineId as machineId, 
       avg(value) as value,
       DATE_FORMAT(MAX(LASTUPDATE),'%Y-%m-%d %H:00:00') AS LASTUPDATE 
from Power 
WHERE machineId in (1,2) AND 
      str_to_date(LASTUPDATE, '%Y-%m-%d %H:%i:%s' ) > str_to_date('2018-11-15 09:00:00', '%Y-%m-%d %H:%i:%s') 
group by date_format( LASTUPDATE, '%Y%m%d%H'  ), machineId

有什么主意吗?

1 个答案:

答案 0 :(得分:0)

是的,您只需要用15分钟的时间来表示时间即可。

 FLOOR(CAST(DATE_FORMAT(last_update, '%i') AS UNSIGNED)/15)

然后转换回分钟:

 15*FLOOR(CAST(DATE_FORMAT(last_update, '%i') AS UNSIGNED)/15)

然后将其放在查询中(简体):

 SELECT machine
 , CONCAT(DATE_FORMAT(last_update, '%Y-%m-%d %H')
    , LPAD(15*FLOOR(CAST(DATE_FORMAT(last_update, '%i') AS UNSIGNED)/15), 2, '0')
    ) AS timebin
 , AVG(value)
 FROM yourtable
 GROUP BY machine
 , DATE_FORMAT(last_update, '%Y-%m-%d %H')
 , 15*FLOOR(CAST(DATE_FORMAT(last_update, '%i')/15))