我有一个带有 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 的新对象中?
最佳答案
你的回应是这样的:
{
'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
此代码假定您有一个带有 date
和 average
属性的 DailyAverage
模型。
您可能必须在每个循环中使用 to_date
:
averages.each do |date, avg|
DailyAverage.create(date: date.to_date, average: avg.to_f)
end
关于ruby-on-rails - 从查询中保存新对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14147498/