获取平均日或周值

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