sql - 将统计数据整理成时间 block

标签 sql mysql

我正在尝试为 MySQL 制定 SQL 语句。我有一系列服务器的一系列统计数据,每半小时报告一次。我有一个统计表,其中的列与此类似:

server varchar(64), 
time datetime,
bytesIn int,
bytesOut int

现在,我想生成一系列报告,整理所有服务器上 1 小时或 1 天时间段内的所有 bytesIn 和 bytesOut。 IE。我知道我需要 SUM(bytesIn) 作为 bytesIn,SUM(bytesOut) 作为 bytesOut,但不知道如何将所有时间“聚集”到每小时/每日存储桶中,并返回“聚集”时间。 也就是说,返回的数据应该如下所示:

Time,bytesIn,bytesOut
12:00,1024,2048
13:00,4096,8192
etc

我知道这应该很简单,但我迷路了。有人可以帮忙吗?

最佳答案

也许您可以使用DATE_FORMAT()功能、分组。这是一个示例,希望您能够适应您的具体需求。

SELECT
    DATE_FORMAT( time, "%H:%i" ),
    SUM( bytesIn ),
    SUM( butesOut )
FROM
    stats
WHERE
    time BETWEEN <start> AND <end>
GROUP BY
    DATE_FORMAT( time, "%H:%i" )

如果您的时间窗口涵盖超过一天,并且您使用示例格式,则不同日期的数据将聚合到“一天中的小时”存储桶中。如果原始数据不完全符合小时,您可以使用“%H:00”来平滑它。

关于sql - 将统计数据整理成时间 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1767483/

相关文章:

sql - PostgreSQL 中的慢 GroupAggregate

mysql - 在 MySQL 中管理分层数据

php - 获取JSON : NetworkError: 500 Internal Server Error

php - 将项目从 windows-1256 转换为 utf-8 字符集,正确的步骤是什么?

php图片上传

mysql - 尝试插入时出现 SQL 错误

sql - 分组 IN 语句 sql

MySQL - 计算每组中的行数

mysql - 将列添加到现有的多列索引

php - 使php文件对外界隐藏