モデルビューのテーブルがあります:
View(id: integer, created_at: datetime)
チャートで使用するために、一定期間内の時間、日、月、または年ごとのビュー数を生成したいと考えています。私はすでに次のようなことをしています:
View.group('DATE(views.created_at)')
.select("*, count(*) AS series_count, DATE(views.created_at) AS series_time")
.where(:created_at => (Time.now-7.days)..Time.now)
これにより、次の結果が得られます。
2012-06-16 => 20
2012-06-17 => 12
2012-06-18 => 15
2012-06-20 => 38 # Issue: Didn't include a day with no records
2012-06-21 => 11
2012-06-22 => 76
最初の問題は、レコードのない日や月などにパディングを追加しないことです。
2 つ目の問題は、別の日が追加されて 8 日になる場合があることです。
3 番目の問題は、1 時間あたりのカウントやその他のタイム サイクルを表示しようとすると、非常に扱いにくくなることです。
基本的に、次のような統計情報を簡単に生成するために、すべてのモデルに含まれるモジュール Timeline を作成しています。
include Timeline # on the model
Model.timeline(
:time_column => :created_at,
:period => (Time.now-24.hours)..Time.now,
:by => :hours
)
ありがとう!