2017-04-07 71 views
0

有一個Company有很多DailyDatumDailyDatumdatevolume列。如何獲得最近的n項平均積極記錄

class Company < ActiveRecord::Base 
    has_many :daily_data 
end 

我想要得到最近的10個volumes的平均值。通過這個代碼我得到的平均值。(我實現Array#mean法)

company = Company.first 
company.daily_data.order(date: :desc).limit(10).pluck(:volume).mean 

而且我認爲它更efficiant如果我使用PostgresqlAVG功能。但不知何故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]] 

我可以使用limitorderaverage在同一時間?

+1

無論您是否按日期訂購它都沒關係,因爲它總是一行。 –

+0

通過id對desc進行排序隨着記錄數量的增加,它是一個更高效的索引。 – s1mpl3

回答

0

你需要使用一個子查詢的查詢像

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

對Rails這樣做很可能會包括find_by_sql方法。然而,我認爲你不會注意到任何性能上的好處,因爲你只計算10條記錄。

+1

謝謝,當我需要計算更多的記錄時,我將使用'find_by_sql'。 – ironsand