Rails ограничивает записи по свойству

#sql #ruby-on-rails #postgresql #subquery

#sql #ruby-on-rails #postgresql #подзапрос

Вопрос:

У меня есть две модели Category и Call .

Вызов принадлежит к категории

Call имеет category_id и priority .

Мне нужно получить только 10 вызовов из каждой категории (сначала те, у которых более низкий приоритет).

Есть ли какой-нибудь способ получить это с помощью одного запроса?

Комментарии:

1. для меня это похоже на стандартный SQL, просто проверьте документ ActiveRecord, чтобы сделать это, но я думаю, что это должно быть возможно

2. @SylvainChaugny Я проверил, но не нашел ничего полезного

Ответ №1:

Вы можете добиться этого следующим образом:

 Call.from("(select calls.*, row_number() over (partition by category_id order by priority) as num 
            from calls) c")
    .where("num <= 10")
    .select("c.id, c.category_id, c.priority")