我正在尝试为MySQL编写一个SQL语句。我有一系列服务器的统计数据,每半小时报告一次。我有一个stats表,其列类似于:
server varchar(64),
time datetime,
bytesIn int,
bytesOut int
现在,我要生成一系列报告,在所有服务器上按1小时或1天的周期整理所有bytesIn和bytesOut。
也就是说,我知道我需要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"
来平滑它。