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

orr*_*ymr 6 ruby ruby-on-rails

我有一个包含“日期”和“频率”字段的模型(频率是整数)。我正在尝试获取每个日期的前5个频率。本质上,我想按日期分组,然后获得每个分组的前5名。

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

Observation.channel("channelOne").order('date', 'frequency desc').group(:date).having('frequency = MAX(frequency)')
Run Code Online (Sandbox Code Playgroud)

我想要MAX(frequency)PLUS PER DATE第二,第三,第四和第五大日期。

抱歉,如果这真的很简单,或者我的用语不对;我刚开始使用Rails :)

Rod*_*igo 6

您可以使用此:

 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")
Run Code Online (Sandbox Code Playgroud)

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