1

過去 10 年間の 1 時間ごとの価格データを含む PostgreSQL データベースを備えた Rails アプリがあり、新しい DB テーブルに保存された毎日の平均価格を取得する必要があります。このクエリは、日ごとにレコードをグループ化し、各日の平均価格を返します。

averages = Sale.average(:price, :group => "DATE_TRUNC('day', date)")

Rails Console の応答は次のようになります (2 日間のデータのサンプル)。

{"2013-01-03 00:00:00"=>#<BigDecimal:7fcc7c2e4a28,'0.1752888888 88888889E2',27(27)>, "2013-01-02 00:00:00"=>#<BigDecimal:7fcc7c2e4848,'0.2547086956 52173913E2',27(27)>}

これらの返された日付と平均価格の値を DailyAverage という新しいオブジェクトに保存するコードを作成する方法を誰か提案できますか?

4

1 に答える 1

2

あなたの応答は次のようになります:

{
  'date' => BigDecimal,
  'date2' => BigDecimal,
  'date2' => BigDecimal,
}

したがって、次のように各日付の各平均にアクセスできます。

averages = Sale.average(:price, :group => "DATE_TRUNC('day', date)")

averages.each do |date, avg|
  DailyAverage.create(date: date, average: avg.to_f)
end

このコードは、属性を持つDailyAverageモデルがあることを前提としています。dateaverage

to_date各ループでaを使用する必要がある場合があります。

averages.each do |date, avg|
  DailyAverage.create(date: date.to_date, average: avg.to_f)
end
于 2013-01-03T21:29:39.327 に答える