#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")