2009-10-12 9 views
5

私はいくつかのフィールドを持つデータベースを持っています。しかしそれは大きな問題ではなく、作成した月までにこれらのフィールドをグループ化したいと思います。 ActiveRecordは自動的に "created_at"という名前のフィールドを作成しました。だから私の質問。どのように月ごとに結果をグループ化し、毎月のフィールドを合計することができますか?データベースからの結果の選択、集計、合計

は、これは私が今持っているコードであるコード

@hours = Hour.all(:conditions => "user_id = "+ @user.id.to_s, 
        :group => "strftime('%m', created_at)", 
        :order => 'created_at DESC') 

を更新しました。月単位で管理することはできますが、私のフィールドのうち2つを合計することはできません。 "mins"と "salary"を合計する必要があります。

答えて

1

:クエリを取得するときに選択し、手動で

@hours = Hour.all(:conditions => "user_id = "+ @user.id.to_s, 
        :select => "created_at, SUM(time) time", 
        :group => "strftime('%m', created_at)", 
        :order => 'created_at DESC') 
1

あなたが使用するSQLクエリがあるかどうかわかりません現在のテーブル構造を変更することなく)。しかし、いくつかのコード行でそれを行います。

records = Tasks.find(:conditions => {..}) 
month_groups = records.group_by{|r| r.created_at.month} 
month_groups.each do |month, records| 
    sum stuff.. blah blah blah.. 
end 

この質問の右側にこのリンクがあります。 MySQL以外の他のデータベースも同様の機能を持っていると仮定します。

mysql select sum group by date

2

これを行うには、active record calculationsを使用することができます。いくつかのサンプルコードは、警告のMONTHと明らかに

Model.sum(:column_name, :group => 'MONTH("created_at")') 

は、MySQL固有であるかもしれないので、あなたはSQLiteデータベース上で開発していた場合、これは動作しないでしょう。使用して、それを修正

+0

を選択し入力環境は、この時点で私が持っているコードの最初の記事で編集を参照してください。あなたのようなことが書いてありましたか? – ThoKra

+0

更新リンク:http://api.rubyonrails.org/classes/ActiveRecord/Calculations.html – Meekohi