Ruby on rails 如何通过ActiveRecord获得最近n个项目的平均值

Ruby on rails 如何通过ActiveRecord获得最近n个项目的平均值,ruby-on-rails,postgresql,Ruby On Rails,Postgresql,有一家公司有许多日常数据每日数据有日期和卷列 class Company < ActiveRecord::Base has_many :daily_data end 我认为如果我使用PostgresqlAVG函数会更有效。但不知何故,order就这样被忽略了 company.daily_data.order(date: :desc).limit(10).average(:volume) (15.7ms) SELECT AVG("daily_data"."volume") F

有一家
公司
有许多
日常数据
<代码>每日数据有
日期

class Company < ActiveRecord::Base
  has_many :daily_data
end
我认为如果我使用
Postgresql
AVG
函数会更有效。但不知何故,
order
就这样被忽略了

company.daily_data.order(date: :desc).limit(10).average(:volume)
   (15.7ms)  SELECT  AVG("daily_data"."volume") FROM "daily_data" WHERE "daily_data"."company_id" = $1 LIMIT 10  [["company_id", 1123]]

我可以同时使用
限制
订单
平均值
吗?

对于这样的查询,您需要使用子查询

select avg(volume) from
  (select volume from daily_data where company_id = 1 limit 10) as temp

在Rails中执行此操作可能包括
findbysql
方法。但是,我认为您不会注意到这对性能的任何好处,因为您只计算了10条记录。

无论您是否按日期订购,因为它始终是1行。按id订购描述随着记录数量的增加,它是一个更有效的索引。谢谢,当我需要计算更多的记录时,我将使用
find\u by\u sql
select avg(volume) from
  (select volume from daily_data where company_id = 1 limit 10) as temp