Rails ActiveRecord group_by某些内容,并为每个组选择一个最大(col)记录



我有一个访问表(人,visit_type,日期,...),我想按visit_type和人分组,然后选择每个组中具有MAX(date)的记录。我很确定使用查询代数而不是编写 SQL 应该很简单,但似乎无法让它工作。我以为它会是这样的:

Visit.group(:visit_type, :person).having("date = MAX(date)")

但这不会从每个组中选择单个记录。

编辑:啊!经过更多的调查 - 事实证明上述确实有效!耶!

编辑:啊!它适用于sqlite和mySql,但不适用于postgres,这与根据标准更严格地实现group_by函数有关。嘘,垃圾!这意味着我仍在寻找答案。

编辑:我不认为每次在sqlite上都会给出正确的结果。

好的,这是我目前要做的:

Visit.all.group_by{|v| [v.visit_type,v.person]}.map{|key, value| value.inject{|memo, visit| memo.date > visit.date ? memo : visit}}

我知道这并不漂亮,但这是我女儿的6岁生日,所以我必须去!

这行得通吗?

Visit.joins('LEFT JOIN visits v2 on visits.visit_type = v2.visit_type AND visits.person = v2.person AND visits.date > v2.date')

相关内容

  • 没有找到相关文章

最新更新