2011-11-09 87 views
2

我有一個答覆表,其中有一個時間戳字段(created_at),一個ID和一個外鍵(context_id)SQL:每5個分鐘間隔(包括零)

對於給定的情況下盤點記錄,我想看看5分鐘內發生了多少次反應。

這是一個非常類似的情況在以下問題:

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

除了我沒有使用SQL Server中,我使用MySQL,但希望看到一個更通用的解決方案。

會有很多5分鐘的時間間隔,其中有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行的表格。