在Ruby on Rails中获得每组的前N个项目

时间:2015-09-30 14:31:02

标签: ruby-on-rails ruby

我有一个带有“date”和“frequency”字段的模型(Frequency是一个整数)。我试图获得每个日期的前5个频率。 基本上我想按日期分组,然后获得每组前5名。

到目前为止,我只检索了组中的前1名:

Observation.channel("channelOne").order('date', 'frequency desc').group(:date).having('frequency = MAX(frequency)')

我希望MAX(频率)加上第二,第三,第四和第五大PER日期。

很抱歉,如果这很简单,或者我的术语已关闭;我刚开始使用rails:)

1 个答案:

答案 0 :(得分:5)

您可以使用:

 Observation
   .select("obs1.*")
   .from("observations obs1")
   .joins("LEFT JOIN observations AS obs2 ON obs1.date = obs2.date AND obs1.frequency <= obs2.frequency")
   .group("obs1.date, obs1.id")
   .having("count(*) <= 5")
   .order("obs1.date, obs2.frequency")

此查询返回每个日期的前5个频率。