我的数据库中有日期(类型:日期时间)列和价格(类型:十进制)列。每小时创建和保存记录。我需要创建一个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条记录。
答案 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
这只是一个解决方案的想法。你最好理解它并自己实现。