代码之家  ›  专栏  ›  技术社区  ›  cmroanirgo

将统计数据整理成时间块

  •  2
  • cmroanirgo  · 技术社区  · 16 年前

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

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

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

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

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

    2 回复  |  直到 8 年前
        1
  •  4
  •   martin clayton egrunin    16 年前

    也许你可以用 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" .

        2
  •  0
  •   hgh    16 年前

    想要这个工作吗?

    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格式,但我相信您可以使用“截止日期”或其他格式来解决这个问题-不知道您如何存储时间戳…