Distinct не работает с предложением select

У меня 2 стола

class DepartmentBudget < ApplicationRecord
  has_many :budget_details, dependent: :destroy
end

class BudgetDetail < ApplicationRecord
  belongs_to :department_budget
end

У каждого отдела есть бюджеты на определенный период времени. и у каждого отдела есть много budget_details, которые состоят из всех записей по кредиту и дебету и поддерживают остаток.

Проблема в том, что я хочу применить сортировку бюджета отдела на основе баланса последней детали бюджета.

DepartmentBudget
  .joins(:budget_details)
  .select('budget_details.balance, department_budgets.*')
  .order("budget_details.balance ASC")
  .distinct

Я выполнил вышеуказанный запрос, но он возвращает повторяющиеся записи. проблема связана с предложением Выбрать, если я удалю select, то отдельные работы, но я должен использовать select с отличным. Любая помощь будет оценена.

based on last record of budget detail's balance attribute Эта фраза сбивает с толку. У атрибута не может быть последней записи. Только таблица может иметь последнюю запись с несколькими атрибутами. Прошу уточнить вопрос
chumakoff 19.09.2018 23:14

У меня есть более проясненный пост

darshi kothari 20.09.2018 07:46

Если вам нужно применить сортировку на основе последней связанной записи budget_details, тогда столбец budget_details.created_at должен каким-то образом участвовать в запросе, чтобы найти последнюю созданную запись. Вы так не думаете?

chumakoff 20.09.2018 11:07
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Шаг 1: Создание приложения Slack Чтобы создать Slackbot, вам необходимо создать приложение Slack. Войдите в свою учетную запись Slack и перейдите на...
1
3
66
2

Ответы 2

DepartmentBudget.includes(:budget_details).order("budget_details.balance ASC")

Хотя это может ответить на вопрос авторов, в нем отсутствуют некоторые поясняющие слова и ссылки на документацию. Фрагменты исходного кода не очень полезны без некоторых фраз. Вы также можете найти как написать хороший ответ очень полезным. Пожалуйста, отредактируйте свой ответ.

hellow 19.09.2018 10:28

Непонятно, какова ваша цель, но если мы предположим, что ваш SQL логически верен, вам следует использовать предложение GROP BY и агрегатную функцию для достижения своей цели.

DepartmentBudget.joins(:budget_details)
                .select('department_budgets.*, MIN(budget_details.balance)')
                .group('department_budgets.id')
                .order("MIN(budget_details.balance) ASC")

Другие вопросы по теме