【问题标题】:.distinct not returning unique entries.distinct 不返回唯一条目
【发布时间】:2016-11-08 02:17:01
【问题描述】:

我有一个项目表,在该表中,可能有多次同名的同一个项目,但是 created_at 月份会有所不同。我正在尝试选择表中每个项目的最新记录。使用 select 可以,但是我需要整个记录,这样我就可以遍历记录并打印出不同的属性,例如价格或其他属性。

我试过了:

Project.distinct(:project_name) – 打印所有记录(为了检查这一点,我复制了项目名称并进行了查找,所有具有相同名称的项目仍会打印出来)

Project.order(project_name: :asc, created_at: :desc).uniq(:project_name) – 结果与上面相同

Project.select(:project_name).distinct – 仅提取 1 个,但它仅选择项目名称,不选择记录中的其他数据。

【问题讨论】:

  • 正确,.select 只抓取列出的字段名称。

标签: ruby-on-rails postgresql ruby-on-rails-4 activerecord


【解决方案1】:

这就是DISTINCT ON来救援的情况。

这应该可行:

Project.select("DISTINCT ON (project_name) *").order("project_name, created_at DESC")

如果只选择特定列,请指定它们而不是*

Project.select("DISTINCT ON (project_name) project_name, created_at, price").order("project_name, created_at DESC")  

【讨论】:

  • 成功了。谢谢Dnsh。现在奇怪的是,在创建了 var my_projects 来存储选定的项目之后,我调用了 .sum(:budget_margin)——而不是仅仅将这些项目相加,它仍然将所有内容相加。我遍历了这些列,而 var 只包含唯一的项目,所以我不知道它是如何获取所有项目并将它们相加的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多