あなたは「バケット」のテーブルで始まる場合
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()のような自動シリーズジェネレータと一般的なテーブル式を避けなければなりません。 (あなたはgenerate_series()を模倣する独自の関数を書くことができるかもしれませんが)
したがって、最も一般的な解決策は単なるベーステーブルです。列を索引付けできるので、基本表から最高のパフォーマンスを得ることもできます。
あなたは、そのようなテーブルの暦年に約105,000行を見ています。