Rails db查询唯一列值和最大值

时间:2014-03-20 20:19:15

标签: ruby-on-rails activerecord

我需要查询db唯一值和另一列的最大值。

例如:

:name => "some_name_1", :version => 10, :other_columns...
:name => "some_name_1", :version => 11, :other_columns...
:name => "some_name_2", :version => 15, :other_columns...
:name => "some_name_3", :version => 18, :other_columns...

我需要的是,如果名称多次显示,则查询应仅返回具有最新版本的名称(更高版本号)

所以看起来应该是这样的:

:name => "some_name_1", :version => 11, :other_columns...
:name => "some_name_2", :version => 15, :other_columns...
:name => "some_name_3", :version => 18, :other_columns...

请注意:name => "some_name_1", :version => 10, :other_columns... 那些未在查询中显示的那些,因为已存在具有相同名称的记录,并且版本号为。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

Table.select("tables.name, MAX(tables.version)").group("tables.name")

如果你还需要获得other_columns,你必须向它们申请一些聚合函数(就像使用MAX聚合函数的版本列一样。或者你可以在中指定其他列) group 子句以避免使用聚合函数(仅当 name 列的每个相同值的每个其他列的值相同时)

Table.select("tables.name, MAX(tables.version), tables.other_column1, tables.other_column2").group("tables.name, tables.other_column1, tables.other_column2")