0

我的数据库中有一个日期(类型:DateTime)列和一个价格(类型:十进制)列。每小时创建和保存记录。我需要创建一个 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 条记录。

4

1 回答 1

1

范围是选择一些记录并将它们分组的好方法。在销售类中定义类似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

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

于 2013-01-03T07:58:00.567 回答