【问题标题】:SQL : count records per 5 minute intervals (including zeros)SQL :每 5 分钟间隔计数记录(包括零)
【发布时间】:2011-11-09 17:44:18
【问题描述】:

我有一个响应表,它有一个时间戳字段 (created_at)、一个 id 和一个外键 (context_id)

对于给定的上下文,我想查看在 5 分钟的时间间隔内发生了多少响应。

这与以下问题的情况非常相似:

Sql Server: Count records (including zero) per ten-minute intervals

除了我没有使用 SQL Server,我使用的是 MySQL,但希望看到更通用的解决方案。

会有很多 5 分钟的时间间隔有 0 个响应,我希望将其包含在结果中。

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    如果你从一个“桶”表开始

    bucket_start          bucket_end
    --
    2011-01-01 00:00:00   2011-01-01 00:05:00
    2011-01-01 00:05:00   2011-01-01 00:10:00
    2011-01-01 00:10:00   2011-01-01 00:15:00
    2011-01-01 00:15:00   2011-01-01 00:20:00
    

    然后您可以使用外连接来获取缺失的零。

    select bucket_start, bucket_end, count(context_id)
    from buckets b
    left join responses r 
           on (r.response_time >= b.bucket_start and 
               r.response_time <  b.bucket_end)
    group by b.bucket_start, b.bucket_end
    

    有很多方法可以生成存储桶的表(或视图)。但最通用的解决方案必须避免自动系列生成器(如 PostgreSQL 的 generate_series())和公用表表达式,因为 MySQL 不支持它们。 (尽管您也许可以编写自己的函数来模仿 generate_series()。)

    所以最通用的解决方案只是一个基表。您还可能从基表中获得最佳性能,因为您可以索引列。

    对于这样的表格,您在每个日历年查看大约 105,000 行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-02
      • 1970-01-01
      • 1970-01-01
      • 2020-11-10
      相关资源
      最近更新 更多