将统计数据整理成时间块

时间:2009-11-19 23:59:41

标签: sql mysql

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

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

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

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

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

2 个答案:

答案 0 :(得分:4)

也许您可以使用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"来平滑原始数据。

答案 1 :(得分:0)

会是这样的吗?

SELECT substr( time, 12, 2) AS time,  sum( bytesIn ) AS bytesIn, sum( bytesOut ) AS bytesOut 
GROUP BY substr( time, 12, 2) 

它会依赖你的时间戳字段,总是有一个标准的yyyy-mm-dd-hh.nn.ss格式,但我相信你可以使用to_date或其他东西解决这个问题 - 不知道你是怎么做的存储了你的时间戳......