我有这样的统计数据:
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')
,我会获得一整天的一个值。但我想要所有日子的所有平均值。
答案 0 :(得分:1)
您似乎有兴趣按五分钟间隔而不是日期对日期进行分组。这很简单:
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
答案 1 :(得分:0)
我会这样做:
select date(from_unixtime(time)) as day, avg(val)
from table t
group by date(from_unixtime(time))
order by day;
虽然你可以使用format参数,但我想更多的是将值转换为字符串而不是日期/时间。