У меня есть модель с полями «дата» и «частота» (частота - целое число). Я пытаюсь получить 5 лучших частот в день. По существу я хочу группировать по дате, а затем получить 5 лучших за группу.Получить верхние N элементов в группе в Ruby on Rails
То, что я до сих пор только извлекает верхний 1 в группе:
Observation.channel("channelOne").order('date', 'frequency desc').group(:date).having('frequency = MAX(frequency)')
Я хочу MAX (частота) плюс второй, третий, четвертый и пятый по величине для каждой даты.
Извините, если это действительно просто или моя терминология выключена; Я только начал с рельсами :)
В какой базе данных у вас есть? – romainsalles
@romainsalles -> mysql – orrymr
Я думаю, что это больше проблема SQL. См. Функцию '' '' ROW_NUMBER() '' 'в mysql (http://stackoverflow.com/questions/1895110/row-number-in-mysql) и объедините ее с методом ActiveRecord« find_by_sql »(http: // apidock.com/rails/ActiveRecord/Base/find_by_sql/class). Вы должны иметь возможность определить соответствующий запрос для получения пяти наиболее частых наблюдений по дате. – romainsalles