我有一个带有“date”和“frequency”字段的模型(Frequency是一个整数)。我试图获得每个日期的前5个频率。 基本上我想按日期分组,然后获得每组前5名。
到目前为止,我只检索了组中的前1名:
Observation.channel("channelOne").order('date', 'frequency desc').group(:date).having('frequency = MAX(frequency)')
我希望MAX(频率)加上第二,第三,第四和第五大PER日期。
很抱歉,如果这很简单,或者我的术语已关闭;我刚开始使用rails:)
答案 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个频率。