如何查找组中特定字段的最大值的记录

时间:2017-04-24 02:03:10

标签: sql ruby-on-rails activerecord

我有一个graphs表,其中包含字段nameversion。每次插入记录时,如果数据库中不存在名称,则版本为0,否则为max(version) + 1。我想获得每个唯一名称具有最高版本的记录列表。以下代码执行此操作:

def self.latest_versions
   Graph.group(:name).maximum(:version).map{ |k,v|  find_by name: k, version: v}
end

但是我想知道是否有一种更快的方法可以使用仅仅链接活动记录关系的范围来做到这一点?

1 个答案:

答案 0 :(得分:1)

这个怎么样

def self.latest_versions
  name_versions = Graph.group(:name).maximum(:version).map {|k,v| [k,v].join(';')}
  Graph.where("concat(name, ';', version) IN (?)", name_versions)
end

获取name, version组后,将其转换为数组,将2列连接成1,通过组合列查询,我们只需要另外一个sql查询,总共2个,比现有查询要好得多