1

我有一个带有 PostgreSQL 数据库的 Rails 应用程序,其中包含过去 10 年的每小时价格数据,我需要将每天的每日平均价格保存在一个新的数据库表中。此查询按天对记录进行分组并返回每天的平均价格:

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

Rails 控制台响应如下所示(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 回答