簡體   English   中英

SQL:每5分鍾間隔計數記錄(包括零)

[英]SQL : count records per 5 minute intervals (including zeros)

我有一個響應表,其中有一個時間戳字段(created_at),一個id和一個外鍵(context_id)

對於給定的上下文,我想查看在5分鍾的間隔內發生了多少響應。

這與以下問題非常相似:

SQL Server:每十分鍾間隔計數記錄(包括零個)

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

我希望在結果中包含5個間隔,其中有0個響應。

如果從“桶”表開始

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM