在基于rails4的另一个字段进行分组之后,不会列出基于字段的不同记录

时间:2018-09-20 07:25:26

标签: sql ruby-on-rails ruby postgresql associations

我有一个查询,用于根据project_parent_id字段列出唯一记录。记录应基于最近的update_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)

获得的结果是:

Project:0x0000000bd2a568 id:2973,Updated_at:Wed,19 Sep 2018 10:03:27 UTC +00:00,project_parent_id:2966,

Project:0x0000000bd2a400 id:2972,update_at:Wed,19 Sep 2018 09:45:03 UTC +00:00,project_parent_id:2964,

Project:0x0000000bd2a298 id:2971,Updated_at:Wed,19 Sep 2018 09:44:30 UTC +00:00,project_parent_id:2966

但是,最后一条记录不在结果中。最后一条记录和第一条记录具有相同的project_parent_id:2966。仅前两条记录就足够了。

可以帮忙吗?

3 个答案:

答案 0 :(得分:0)

您正在选择“ Arrays.fill(cardNo, i*13, (i+1)*13, i+1); ”的不同组合。返回最后一条记录,因为project_parent_id,id,updated_at与第一条记录中的记录不同。如您所说

  

意味着,一天只能出现一条记录,持续一天   project_parent_id。

因此,您的结果集中没有错误。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

使用DISTINCT ONproject_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)