在一天内收到所有价值&创造平均

时间:2013-01-03 07:37:19

标签: ruby-on-rails ruby activerecord

我的数据库中有日期(类型:日期时间)列和价格(类型:十进制)列。每小时创建和保存记录。我需要创建一个rake任务来遍历所有存储的数据并创建每天的平均价格。

使用ActiveRecord,如何查询我的所有记录,将每天的所有记录组合在一起,从这24条记录中创建新的平均价格,并将其作为新记录保存在不同的表中?

我想它会像这样的伪代码:

Sales.all
  loop through them and group records by day
    loop through each grouping and create average
      average = DailyAverage.create

仅供参考我有大约10,000条记录。

1 个答案:

答案 0 :(得分:1)

范围是选择一些记录并对其进行分组的好方法。在Sales类中定义类似scope :by_date, ->(needful_date) { where{ date == needful_date} }的内容。然后在另一个模型(与另一个表相关)中定义您的计算:

def calculate_average_prices
  first_sale_date = # find your first sale date
  date_range = first_sale_date..Date.today
  grouped_sales = date_range.map{|date| Sales.by_date(date)}
  average_prices = grouped_sales.map do |sales|
    sales.map{|sale| sale.price.to_f}.average
  end
  # save your average prices
end

这只是一个解决方案的想法。你最好理解它并自己实现。