基于日期的输出数组(按天的销售数字)
问题描述:
我有一个名为'cost'的浮动表和名为'created_at'的时间戳。基于日期的输出数组(按天的销售数字)
我希望它输出一个数组,并将上个月每个特定日的费用相加。
喜欢的东西:
@newarray = [] #creating the new array
month = Date.today.month # Current Month
year = Date.today.year # Current Year
counter = 1 # First Day of month
31.times do #for each day of the month (max 31)
#adding sales figures for that day
@newarray.push(Order.sum(:cost, :conditions => {:created_at => "#{year}-#{month}-#{counter}"}))
counter = counter + 1 #go onto next day
end
然而,由于所有的时间戳有一个时间以及这行不通。
为穷人头衔道歉,我似乎无法想到一个明智的。
答
你应该能够使用如下代码:
sales_by_day = Order.sum(:cost,
:group => 'DATE(created_at)',
:conditions => ['DATE(created_at) > ?', 31.days.ago])
(0..30).collect { |d| sales_by_day[d.days.ago.to_date.to_s] || 0 }.reverse
这将总结一天的订单成本,然后创建索引0是过去24小时内的数组。它也只需要一个查询,而您的示例则需要31个。
要更改截止日期,请将31.days.ago替换为Time类的一个实例。这里的文档:http://ruby-doc.org/core/classes/Time.html
祝你好运!
答
这应该工作:
(Date.today.beginning_of_month..Date.today.end_of_month).map { |d|
Order.sum(:cost, :conditions => ['created_at >= ? AND created_at < ?', d, d+1])
}
虽然我想你应该尝试使用单个查询,而不是让一个每天它得到。
这看起来不错,仍然试图了解代码。目前它也输出日期 - 我如何删除它?如何在每个条目之间添加逗号分隔符? – vectran 2010-03-07 23:57:28