2013-01-03 150 views
0

我有一個日期(類型:日期時間)列和一個價格(類型:十進制)列在我的分貝。記錄每小時創建並保存。我需要創建一個rake任務來查看我存儲的所有數據,併爲每一天創建一個平均價格。在一天內接收所有值並創建平均值

使用ActiveRecord,我如何查詢所有記錄,將每天的所有記錄分組在一起,從這24條記錄中創建新的平均價格,並將它作爲新記錄保存在不同的表中?

我想這將是這樣的僞代碼:

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

FYI我有大約10000條記錄。

回答

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 

這只是一個解決方案的想法。你最好理解它並且實現你自己。

+0

謝謝,亞歷克斯。我有大約3,650天需要分組。我可以在日期範圍內輸入範圍內的needful_date參數嗎? – ac360

+1

如果你想在範圍中使用'by_date',沒關係。只需使用' - >(date_range){where {date_range.include?(date)}}來更新'by_date'' –