我在一个数据库表中有这种数据结构:
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}
有什么方法可以通过一个查询以我需要的格式获取数据?
编辑:设置“零天”:
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
我构建了这个片段,它将检查过去一周内数据库中没有数据的日子。它可以工作,但我认为它不是很有效,因为如果我想查看过去一个月/3个月/6个月的数据,计算会花费很多时间。
对更有效的解决方案有什么建议吗?
非常感谢!