获取平均日或周值
Get average day or week values
我有这样的统计数据:
time val1
1424166578 51
1424166877 55
1424167178 57
1424167477 57
time
是 unix 时间戳。除晚上和星期日外,每 5 分钟记录一次。这种情况会持续数周。
现在我想获取平均一天和平均一周的这些值。结果应像正常情况一样包括每 5 分钟的值,但包括过去几天或几周的平均值。
结果应如下所示:
time val1
0 43.423
300 46.635
600 51.887
...
所以时间可以是一个时间戳,具有自一天或一周开始以来的相对时间。也许最好使用 DATETIME
...不确定。
例如,如果我使用 GROUP BY FROM_UNIXTIME(time, '%Y%m%d')
,我会得到一整天的值。但我想要所有天的所有平均值。
我会这样处理:
select date(from_unixtime(time)) as day, avg(val)
from table t
group by date(from_unixtime(time))
order by day;
尽管您可以使用格式参数,但我更倾向于将值转换为字符串而不是 date/time。
您似乎有兴趣按五分钟间隔而不是日期对日期进行分组。这相当简单:
SELECT
HOUR(FROM_UNIXTIME(time)) AS HH,
(MINUTE(FROM_UNIXTIME(time)) DIV 5) * 5 AS MM,
AVG(val1) AS VAL
FROM your_table
WHERE time > UNIX_TIMESTAMP(CURRENT_TIMESTAMP - INTERVAL 7 DAY)
GROUP BY HH, MM
以下结果将解释日期是如何限制的:
time FROM_UNIXTIME(time) HH MM
1424166578 2015-02-17 14:49:38 14 45
1424166877 2015-02-17 14:54:37 14 50
1424167178 2015-02-17 14:59:38 14 55
1424167477 2015-02-17 15:04:37 15 00
我有这样的统计数据:
time val1
1424166578 51
1424166877 55
1424167178 57
1424167477 57
time
是 unix 时间戳。除晚上和星期日外,每 5 分钟记录一次。这种情况会持续数周。
现在我想获取平均一天和平均一周的这些值。结果应像正常情况一样包括每 5 分钟的值,但包括过去几天或几周的平均值。
结果应如下所示:
time val1
0 43.423
300 46.635
600 51.887
...
所以时间可以是一个时间戳,具有自一天或一周开始以来的相对时间。也许最好使用 DATETIME
...不确定。
例如,如果我使用 GROUP BY FROM_UNIXTIME(time, '%Y%m%d')
,我会得到一整天的值。但我想要所有天的所有平均值。
我会这样处理:
select date(from_unixtime(time)) as day, avg(val)
from table t
group by date(from_unixtime(time))
order by day;
尽管您可以使用格式参数,但我更倾向于将值转换为字符串而不是 date/time。
您似乎有兴趣按五分钟间隔而不是日期对日期进行分组。这相当简单:
SELECT
HOUR(FROM_UNIXTIME(time)) AS HH,
(MINUTE(FROM_UNIXTIME(time)) DIV 5) * 5 AS MM,
AVG(val1) AS VAL
FROM your_table
WHERE time > UNIX_TIMESTAMP(CURRENT_TIMESTAMP - INTERVAL 7 DAY)
GROUP BY HH, MM
以下结果将解释日期是如何限制的:
time FROM_UNIXTIME(time) HH MM
1424166578 2015-02-17 14:49:38 14 45
1424166877 2015-02-17 14:54:37 14 50
1424167178 2015-02-17 14:59:38 14 55
1424167477 2015-02-17 15:04:37 15 00