如何获得每分钟存储的值的每小时平均值

时间:2016-12-28 10:35:42

标签: php mysql sql usage-statistics

下表通过cronjob每分钟接收一个数据集(差不多):

id  |  timestamp  | humanTime          | userCount  
-----------------------------------------------------
1      1482310202   2016-12-21 09:50:07   120 
2      1482310262   2016-12-21 09:51:07   126
3      1482310322   2016-12-21 09:52:06   110
4      1482310381   2016-12-21 09:54:06   131
5      ...

由于cronjob是通过网络进行的查询,因此可能无法确保每小时有60个条目由于可能的超时而停止。

我想计算过去X小时内userCount列的每小时平均值。

有没有人有想法?

P.S。:如果没有办法通过sql做到这一点,我想通过PHP解决这个问题

3 个答案:

答案 0 :(得分:1)

您只需要提取日期和时间。我坚持人类的时间:

select date(humanTime) as dd, hour(humanTime) as hh, avg(userCount)
from t
group by date(humanTime), hour(humanTime)
order by dd, hh;

如果您想要最后“n”小时,请包括:

where humanTime >= date_sub(now(), interval "n" hour)

答案 1 :(得分:0)

您可以使用DATEPART。在这里,我每小时提供一天的入场次数:

SELECT DATEPART(hh, human_time) AS hour, COUNT(id) id
FROM table
WHERE human_time >= '2016-12-21' AND human_time < '2016-12-21'
GROUP BY DATEPART(hh, human_time)

答案 2 :(得分:0)

(PHP解决方案) 由于unix时间戳以秒为单位,因此您可以计算两个小时之间的差异,如下所示:

$stamp1 = 1482310381;
$stamp2 = 1482310202;
$hours_diff = ($stamp1 - $stamp2) / 60 / 60;

您可以同时迭代时间戳和userCount列,并检查: 如果时间戳diff是(或大于)我想要的小时范围,我将计算我得到的userCount的总和(将每个添加到var即$ sum)并将其除以第一个时间戳id列和最后一个时间戳id列。

希望它有所帮助,祝你好运! :)