Mysql 如何计算每小时的平均磁盘空间

Mysql 如何计算每小时的平均磁盘空间,mysql,math,Mysql,Math,我需要计算平均每小时使用的磁盘空间量。在数据库中,我大约每小时记录一次磁盘空间(但不总是每小时,有时多,有时少),我需要计算每小时的平均使用率 不过,我很困惑,因为两次检查之间的持续时间发生了变化。我不太确定这样做的最佳方式 其他细节 澄清: 我们有一个系统设置,每隔一段时间记录一次磁盘空间,用于计费。磁盘空间是按字节计费的,但很明显,数量在整个月都会发生变化,所以我们将其表示为每小时MB 在计费摘要中,我想显示一小时内使用的平均磁盘空间 起初,它每五分钟记录一次日志。然后我把它改为每小时日志。

我需要计算平均每小时使用的磁盘空间量。在数据库中,我大约每小时记录一次磁盘空间(但不总是每小时,有时多,有时少),我需要计算每小时的平均使用率

不过,我很困惑,因为两次检查之间的持续时间发生了变化。我不太确定这样做的最佳方式

其他细节 澄清:

我们有一个系统设置,每隔一段时间记录一次磁盘空间,用于计费。磁盘空间是按字节计费的,但很明显,数量在整个月都会发生变化,所以我们将其表示为每小时MB

在计费摘要中,我想显示一小时内使用的平均磁盘空间

起初,它每五分钟记录一次日志。然后我把它改为每小时日志。最终,如果有足够的帐户可以记录,它将每两个或更多小时记录一次。但需要将其标准化为每小时

这是在月底完成的,所以实际上没有零数据的用例

下面是从MySQL中提取的一些示例数据。第一个查询是五分钟日志,第二个查询是小时日志

mysql> SELECT FROM_UNIXTIME(date) as date, CONCAT(ROUND(bytes / 1048576, 0), ' MB') AS 'disk usage' FROM host_manager_client_resource_usage WHERE type = 'diskspace' LIMIT 25;
+---------------------+------------+
| date                | disk usage |
+---------------------+------------+
| 2013-03-23 22:40:01 | 28130 MB   |
| 2013-03-23 22:45:01 | 28130 MB   |
| 2013-03-23 22:50:01 | 28116 MB   |
| 2013-03-23 22:55:01 | 28111 MB   |
| 2013-03-23 23:00:01 | 28105 MB   |
| 2013-03-23 23:06:58 | 28089 MB   |
| 2013-03-23 23:10:01 | 28089 MB   |
| 2013-03-23 23:15:01 | 28086 MB   |
| 2013-03-23 23:20:01 | 28086 MB   |
| 2013-03-23 23:25:01 | 28086 MB   |
| 2013-03-23 23:30:01 | 28086 MB   |
| 2013-03-23 23:35:01 | 27644 MB   |
| 2013-03-23 23:40:01 | 26902 MB   |
| 2013-03-23 23:45:01 | 26640 MB   |
| 2013-03-23 23:50:02 | 26640 MB   |
| 2013-03-23 23:55:01 | 26640 MB   |
| 2013-03-24 00:00:01 | 25556 MB   |
| 2013-03-24 00:05:01 | 25556 MB   |
| 2013-03-24 00:10:01 | 24798 MB   |
| 2013-03-24 00:15:01 | 24547 MB   |
| 2013-03-24 00:20:01 | 24547 MB   |
| 2013-03-24 00:25:01 | 20701 MB   |
| 2013-03-24 00:30:01 | 20805 MB   |
| 2013-03-24 00:35:02 | 20807 MB   |
| 2013-03-24 00:40:01 | 20613 MB   |
+---------------------+------------+
25 rows in set (0.00 sec)

mysql> SELECT FROM_UNIXTIME(date) as date, CONCAT(ROUND(bytes / 1048576, 0), ' MB') AS 'disk usage' FROM host_manager_client_resource_usage WHERE duration > 2395 AND type = 'diskspace' ORDER BY id LIMIT 25;
+---------------------+------------+
| date                | disk usage |
+---------------------+------------+
| 2013-03-23 22:40:01 | 28130 MB   |
| 2013-03-28 13:20:37 | 772 MB     |
| 2013-03-28 15:00:01 | 772 MB     |
| 2013-03-28 16:00:02 | 772 MB     |
| 2013-03-28 17:00:01 | 771 MB     |
| 2013-03-28 18:00:01 | 771 MB     |
| 2013-03-28 19:00:01 | 771 MB     |
| 2013-03-28 20:00:01 | 771 MB     |
| 2013-03-28 21:00:01 | 771 MB     |
| 2013-03-28 22:00:01 | 771 MB     |
| 2013-03-28 23:00:01 | 771 MB     |
| 2013-03-29 00:00:01 | 771 MB     |
| 2013-03-29 01:00:01 | 771 MB     |
| 2013-03-29 02:00:01 | 771 MB     |
| 2013-03-29 03:00:01 | 771 MB     |
| 2013-03-29 04:00:01 | 771 MB     |
| 2013-03-29 05:00:01 | 767 MB     |
| 2013-03-29 06:00:01 | 767 MB     |
| 2013-03-29 07:00:01 | 767 MB     |
| 2013-03-29 08:00:01 | 767 MB     |
| 2013-03-29 09:00:01 | 769 MB     |
| 2013-03-29 10:00:01 | 769 MB     |
| 2013-03-29 11:00:01 | 769 MB     |
| 2013-03-29 12:00:01 | 769 MB     |
| 2013-03-29 13:00:01 | 766 MB     |
+---------------------+------------+
25 rows in set (0.00 sec)

你为什么不在最开始的时候,在最结束的时候,用它来减去和除以经过的小时数呢

您必须执行一个单独的子选择来获取第一个timestamp+用法、最后一个timestamp+用法。然后是一个简单的方程,如:

(end_usage-start_usage) /
(time_to_sec(timediff(end_timestamp, start_timestamp)) / 3600)

. . 请提供一些样本数据和您想要的。特别是,如果一个小时内有多个读数,您想要什么?如果没有读数,您想要什么?我已经用一些示例数据添加了额外的细节。