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

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

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

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

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

最佳答案

您可以使用此:

 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个频率。

10-02 15:55