我有一个Rails应用程序,可以解析来自各种来源的价格信息。模型看起来像这样:
class Price
attr_accessor :value
belongs_to :product
belongs_to :added_pricelist, :class_name => "Scrape"
belongs_to :removed_pricelist, :class_name => "Scrape"
end
class Product
attr_accessor :name
end
class PriceList
attr_accessor :created_at
has_many :prices
end
每天都有一个刮刀运行,并从API解析产品的一些价格。每次运行刮刀时,它都会创建一个新的PriceList。刮刀记录了价格出现(或消失)的价格 - 因此数据可能看起来像这样。
# NB: Assume product_id is always 1 for these
{ value: 100, added_pricelist_id: 1, removed_pricelist_id: 2 }
{ value: 120, added_pricelist_id: 2, removed_pricelist_id: 3 }
{ value: 140, added_pricelist_id: 3, removed_pricelist_id: 4 }
只有在价格发生变化时才会创建新对象,因此如果它保持不变,您只需:
{ value: 100, added_pricelist_id: 1, removed_pricelist_id: 4 }
我的问题是:使用ActiveRecord,如何找到过去30天内每个产品的平均价格?我需要能够找到特定日期活跃的所有价格,然后平均该数字。可以在一个查询中完成吗? (注意:这是Postgres)。
随意让我澄清任何没有任何意义的事情,并提前感谢您的帮助!
答案 0 :(得分:0)
<强> AVG 强>
虽然我对你发布的内容感到有些困惑,但希望我能给你一些帮助:
您至少有两个选择:
这两个任务都执行相同的任务(除了一个是基于ActiveRecord的),所以我首先看看你的SQL查询是否正确,然后对你拥有的数据执行AVG功能
<强>查询强>
我需要能够找到所有活跃的价格 特定日期,然后平均该数字
我会做这样的事情:
#app/models/PriceList.rb
Class PriceList < ActiveRecord::Base
scope :today, -> { where(created_at: DateTime.now.at_beginning_of_day.utc..Time.now.utc).average(:value) }
end
这样您就可以拨打@product.pricelist.today