我有一个包含“日期”和“频率”字段的模型(频率是整数)。我正在尝试获取每个日期的前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个频率。