DBテーブルの1つにこのデータ構造があります:
id | user_id | amount | created_at
1 | 1 | 3.4 | 2013-09-14 10:10:00
2 | 1 | 2.1 | 2013-09-17 10:10:00
3 | 1 | 7.9 | 2013-09-17 10:10:00
4 | 1 | 0.2 | 2013-09-16 10:10:00
5 | 1 | 6.3 | 2013-09-18 10:10:00
6 | 1 | 11.9 | 2013-09-18 10:10:00
目的の出力: [0, 0, 3.4, 0, 0.2, 10, 18.2] - 過去 7 日間の各ユーザーの毎日の列の金額を合計した配列を取得する必要があります。
これまでのところ、次のようなものを取得できます。
Model.where('user_id = ? AND created_at > ? AND created_at < ?', current_user.id, week, today).group(:created_at).sum(:amount)
次の形式でデータを生成します。
{2013-09-13 23:00:39 UTC=>5.68, 2013-09-16 23:30:35 UTC=>2.55}
たった 1 つのクエリで必要な形式のデータを取得する方法はありますか?
編集:「ゼロ日」の設定:
today = Date.today
week = today - 7
daily = Model.where('user_id = ? AND created_at > ? AND created_at < ?', current_user.id, week, today).group(:created_at).sum(:amount)
new_value_in_array = false
unless daily.empty?
@daily = Array.new
week.upto(today) do |step|
daily.each do |d|
if step.to_s == d[0].strftime('%Y-%m-%d').to_s
@daily << d[1]
new_value_in_array = true
end
end
if new_value_in_array == false
@daily << 0
end
new_value_in_array = false
end
end
過去 1 週間でデータベースにデータがない日をチェックするこのスニペットを作成しました。動いていますが、過去1ヶ月/3ヶ月/6ヶ月のデータを確認したい場合、計算に時間がかかるのであまり効果的ではないと思います。
より効果的な解決策の提案はありますか?
どうもありがとう!