MySQL 最近 30 天每小时的平均值

MySQL average value of each hour for the last 30 days

我有一个 table,它每分钟更新一次,我需要为过去 30 天的值计算每小时的平均值。

Timestamp            | SB1_AC_GES_DIFF
2020-07-14 15:13:04     30
2020-07-14 15:12:07     27
...                     ...

我想在第二个 table 中保存结果,这样命名为 avgTable

Timestamp            | AVG_SB1
15:00                  29
16:00                  32
...                    ...

如果 table 可以每天更新一次就完美了,也许是在 12 点并且当天的日期部分发生变化时。

你可以试试:

INSERT INTO avg_table 
SELECT Date_format(Timestamp, "%h:00:00") AS HourlyTimeStamp, 
       Avg(sb1_ac_ges_diff) AS "AVG_SB1" 
FROM   table
WHERE Timestamp between DATEADD(DAY, -30, GETDATE()) AND GETDATE()
GROUP BY 1

假设您想要平均滚动平均值,与当天无关。

您可以只使用 hour() 函数:

select hour(timestamp) as hh, avg(sb1_ac_ges_diff)
from t
group by hh;

如果需要,您可以将其转换为字符串或时间,但这对我来说似乎没有用。

如果您真的想要每一天的小时数,那么:

select date(timestamp) as dd, hour(timestamp) as hh, avg(sb1_ac_ges_diff)
from t
group by dd, hh;