2011-11-09 7 views
2

(ゼロを含む)5分間隔ごとにレコードを数えます5分間隔で何回の反応が起こったかを知りたい。SQL:私は、私は与えられた状況のためにタイムスタンプフィールド(のcreated_at)、ID、および外部キー(CONTEXT_ID)</p> <p>を持つレスポンステーブルを、持っている

それは、次の質問に非常に似た状況です:私は、SQL Serverを使用していないことを除いて

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

、私は、MySQLを使用していますが、より汎用的な解決策を見たいのですが。

応答に0が含まれている5分間隔が多くありますが、これは結果に含めることを希望します。

答えて

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()のような自動シリーズジェネレータと一般的なテーブル式を避けなければなりません。 (あなたはgenerate_series()を模倣する独自の関数を書くことができるかもしれませんが)

したがって、最も一般的な解決策は単なるベーステーブルです。列を索引付けできるので、基本表から最高のパフォーマンスを得ることもできます。

あなたは、そのようなテーブルの暦年に約105,000行を見ています。

関連する問題