Sql rails activerecord按某物分组,并为每个分组选择一个最大(列)记录
我有一个访问表(人员、访问类型、日期等),我想按访问类型和人员分组,然后在每个组中选择最大(日期)的记录。我很确定使用查询代数应该比编写SQL更简单,但似乎无法让它工作。我以为会是这样的:Sql rails activerecord按某物分组,并为每个分组选择一个最大(列)记录,sql,ruby-on-rails,ruby,arel,Sql,Ruby On Rails,Ruby,Arel,我有一个访问表(人员、访问类型、日期等),我想按访问类型和人员分组,然后在每个组中选择最大(日期)的记录。我很确定使用查询代数应该比编写SQL更简单,但似乎无法让它工作。我以为会是这样的: Visit.group(:visit_type, :person).having("date = MAX(date)") 但这并不是从每组中选择一个记录 编辑:啊!经过进一步的调查,结果证明上述方法确实有效!耶 编辑:啊!它可以在sqlite和mySql上工作,但不能在postgres上工作,这与根据标准更
Visit.group(:visit_type, :person).having("date = MAX(date)")
但这并不是从每组中选择一个记录
编辑:啊!经过进一步的调查,结果证明上述方法确实有效!耶
编辑:啊!它可以在sqlite和mySql上工作,但不能在postgres上工作,这与根据标准更严格地按函数实现group_有关。嘘,垃圾!这意味着我仍在寻找答案
编辑:我不认为每次在sqlite上都能给出正确的结果。这样行吗
Visit.joins('LEFT JOIN visits v2 on visits.visit_type = v2.visit_type AND visits.person = v2.person AND visits.date > v2.date')
这样行吗
Visit.joins('LEFT JOIN visits v2 on visits.visit_type = v2.visit_type AND visits.person = v2.person AND visits.date > v2.date')
好的,我现在要说的是:
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.all.group_by{|v| [v.visit_type,v.person]}.map{|key, value| value.inject{|memo, visit| memo.date > visit.date ? memo : visit}}
我知道这不漂亮,但今天是我女儿的6岁生日,所以我得走了 不知道如何标记为正确,也许我应该删除?建议…这是一个很好的问题/答案,我不提了。我从中学到了一些东西:)参见编辑-不处理postgres,我讨论了错误。仍然在寻找一个优雅的解决方案。你确定不想使用SQL吗?这会很简单。我现在想要任何[优雅的]解决方案!不知道如何标记为正确,也许我应该删除?建议…这是一个很好的问题/答案,我不提了。我从中学到了一些东西:)参见编辑-不处理postgres,我讨论了错误。仍然在寻找一个优雅的解决方案。你确定不想使用SQL吗?这会很简单。我现在想要任何[优雅的]解决方案!不,获取副本,但我有一个使用ruby的解决方案,尽管它有点可怕。不,获取副本,但我有一个使用ruby的解决方案,尽管它有点可怕。