如何获得每分钟存储的值的每小时平均值
How do I get a hourly average of a value which is stored per minute
以下 table 通过 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个条目。
我想计算 userCount 列在过去 X 小时内的每小时平均值。
有人知道吗?
P.S.: 如果无法通过 sql 做到这一点,我想通过 PHP
解决这个问题
您可以使用 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)
(PHP 解决方案)
由于 unix 时间戳以秒为单位,您可以像这样以小时为单位计算 2 个时间戳之间的差异:
$stamp1 = 1482310381;
$stamp2 = 1482310202;
$hours_diff = ($stamp1 - $stamp2) / 60 / 60;
您可以同时迭代 timestamp 和 userCount 列,并检查:
如果时间戳差异是(或大于)我想要的小时范围,我将计算我得到的 userCount 的总和(将每个添加到 var 即 $sum)并将它除以第一个时间戳 id 列和第一个时间戳 id 列之间的差异最后一个时间戳 ID 列。
希望对您有所帮助,祝您好运! :)
您只需要从时间中提取日期和小时。我会坚持人类时间:
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)
以下 table 通过 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个条目。
我想计算 userCount 列在过去 X 小时内的每小时平均值。
有人知道吗?
P.S.: 如果无法通过 sql 做到这一点,我想通过 PHP
解决这个问题您可以使用 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)
(PHP 解决方案) 由于 unix 时间戳以秒为单位,您可以像这样以小时为单位计算 2 个时间戳之间的差异:
$stamp1 = 1482310381;
$stamp2 = 1482310202;
$hours_diff = ($stamp1 - $stamp2) / 60 / 60;
您可以同时迭代 timestamp 和 userCount 列,并检查: 如果时间戳差异是(或大于)我想要的小时范围,我将计算我得到的 userCount 的总和(将每个添加到 var 即 $sum)并将它除以第一个时间戳 id 列和第一个时间戳 id 列之间的差异最后一个时间戳 ID 列。
希望对您有所帮助,祝您好运! :)
您只需要从时间中提取日期和小时。我会坚持人类时间:
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)