我在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
有什么主意吗?
答案 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))