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;
我有一个 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;