0

データベース内に日付(type:DateTime)列と価格(type:Decimal)列があります。レコードは1時間ごとに作成され、保存されます。保存されているすべてのデータを調べて、1日の平均価格を作成するには、レーキタスクを作成する必要があります。

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

スコープは、いくつかのレコードを選択してグループ化するための優れた方法です。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

それは単なる解決策のアイデアです。あなたはそれをよりよく理解し、あなた自身を実行するでしょう。

于 2013-01-03T07:58:00.567 に答える