2012-04-12 4 views
1

私はこの1つを失っています。過去の週の各日のカウント数(毎日7件のクエリ)をカウントするなど、特定の期間の最後のログイン日を持つすべてのレコードを検索するためのカウントクエリを構築できますRuby/Railsでこれを行う方法があるかどうかを知ることに興味があります。タイムライングラフの目的のためにActiveRecordの日付属性を収集する最も良い方法

投稿するサンプルコードはありません。たぶん、このような何かが役立ちます:

hour_range = 7 * 24 # 7 days worth of hours 
start_date = Time.now.to_time - day_range 
end_range = Time.now 
start_date.to_date.upto(end_range.to_date) do |day| 
    # Series of count queries which populate an array of counts for each day... 
end 

私はクライアント側でグラフをグラフ化してHighcharts(またはそれを試しを)使用しています。

ありがとうございました。

答えて

2

前もって計画している場合は、索引付け可能な派生列を表に作成できます。その結果をまとめることはかなり簡単です。

たとえば、1日ごとにグループ化する場合は、日付列を作成します。週単位でグループ化する場合は、2012年の第4週に201204のような値を生成する日付関数を使用してグループ化することができます。%Y%Mの書式設定された日付なので、月がさらに簡単です。

これらのほとんどは、ネイティブSQLの日付フォーマット関数を使用して既存のデータを個別に移行するか、一連のbefore_saveフックとして取り込むことができます。

レポートを効率的かつ迅速に実行するには、できるだけ少ない数のクエリを実行し、DBでの計算を可能な限り簡単にすることが重要です。何百ものレコードをロードしたり、何十というクエリを作成したりすることは、規模を拡大することにはなりません。

+0

ありがとうございました。私は日付の列に良いと思う。モデルオブジェクトには、last_signed_in日付列がすでにあります。私は提案を探していましたが、 "ループとクエリのカウントは毎日"と "単一の日付のみを選択してクエリを比較し、ルビの日に並べ替えてから自分自身を数える"と期待しました。 – garlicman

+0

'GROUP BY'ステートメントのパワーを過小評価してはいけません。 – tadman

関連する問題