【问题标题】:query all records with maximum id in different group from a table in rails environment从rails环境中的表中查询不同组中具有最大id的所有记录
【发布时间】:2014-09-24 19:17:44
【问题描述】:

我有一个表 ordersidcolor 列,id 是唯一列。

|  id  | color |  
| ---- | ----- |  
|   1  | Red   |  
|   2  | Red   |  
|   3  | Green |  
|   4  | Green |  
|   5  | Blue  |  
|   6  | Blue  |  

我希望在他们的color组中得到最大id的所有行,查询结果应该是

|   2  | Red   |  
|   4  | Green |  
|   6  | Blue  |  

如何使用 Sqlite3(开发环境)和 PostgreSQL 9.3(生产环境)在 Rails 环境中查询正确结果

谢谢。

【问题讨论】:

  • 这是DISTINCT ON 的完美用例:Order.select('DISTINCT ON (color) *').order('color, id DESC')
  • @MrYoshiji,谢谢你的回答。看来我没有得到正确的结果。我应该用你的 query+.size 和 Order.group(:color).length 得到相同的计数,对吧?
  • @CloudBSD Order.group(:color).count

标签: sql ruby-on-rails postgresql sqlite ruby-on-rails-4.1


【解决方案1】:

你可以写:

Order.group(:color).maximum(:id)

【讨论】:

  • 比我的答案更好,因为它更干净一些。
【解决方案2】:
Order.select('color, MAX(id) as maxid').group(:color)

(可选)您可以在 .group 子句之前添加 .order(:color)。应该适用于任一数据库。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-16
    • 2017-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多