SQL:每隔5分钟计算一次记录(包括零)

时间:2011-11-09 17:44:18

标签: mysql sql

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

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

这与以下问题非常相似:

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

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

将有5分钟的间隔,其中有0个响应,我希望将其包括在结果中。

1 个答案:

答案 0 :(得分:4)

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

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行。

相关问题