отдельные записи, основанные на поле, не отображаются после группировки на основе другого поля в rails4 - PullRequest
0 голосов
/ 20 сентября 2018

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

Используемый запрос:

Project.unscoped.group("updated_at,project_parent_id,id").select("distinct project_parent_id,id,updated_at").order(updated_at: :desc).where('Date(projects.updated_at)>=? and Date(projects.updated_at)<=? and projects.last_modified_by=? and projects.project_parent_id is not ?', start_date, end_date, user_id,nil)

Полученный результат:

Проект: 0x0000000bd2a568 id: 2973, updated_at: Wed, 19 Sep 2018 10:03:27 UTC +00: 00, идентификатор_проекта_id: 2966,

Проект: 0x0000000bd2a400 id: 2972, updated_at: ср., 19 сентября2018 09:45:03 UTC +00: 00, project_parent_id: 2964,

Проект: 0x0000000bd2a298 id: 2971, updated_at: Ср, 19 сентября 2018 09:44:30 UTC +00: 00, project_parent_id: 2966

Но, последняя запись не ожидала в результате.Последняя запись и первая запись имеют один и тот же project_parent_id: 2966. Достаточно только первых двух записей.

Не могли бы вы помочь.

Ответы [ 3 ]

0 голосов
/ 20 сентября 2018
Project.unscoped.group("updated_at,project_parent_id,id")
                .select("project_parent_id, id, updated_at")
                .order(updated_at: :desc)
                .where("Date(projects.updated_at)>= ? AND Date(projects.updated_at)<= ?", start_date, end_date)
                .where("projects.last_modified_by = ? AND projects.project_parent_id != ?", user_id, nil).uniq
0 голосов
/ 21 сентября 2018

Используйте DISTINCT ON, чтобы получить только первую строку для каждой группы из project_parent_id и дату из updated_at.

Project.unscoped
  .group("DATE(updated_at), project_parent_id, id")
  .select("DISTINCT ON (project_parent_id, DATE(updated_at)) project_parent_id, id, updated_at")
  .order(updated_at: :desc)
  .where('Date(projects.updated_at)>=? and Date(projects.updated_at)<=? and projects.last_modified_by=? and projects.project_parent_id is not ?', start_date, end_date, user_id, nil)
0 голосов
/ 20 сентября 2018

Вы выбираете различные комбинации 'project_parent_id,id,updated_at'.Последняя запись возвращается, потому что project_parent_id отличается от той, что в первой записи.Как вы сказали

Значит, только одна запись может отображаться в течение дня для одного project_parent_id.

Так что в наборе результатов нет ошибок.

...