我需要进行查询以检索不同列的“最后”记录。
我有一个模型,语言,它有 3 列:
Locale -> es | en | de
Version -> 1 | 2 | 3
Data -> aaa | bbb | ccc
区域设置可能存在重复记录,而不是版本。例如:
es | 1 | aaa
es | 2 | aab
es | 3 | aba
en | 1 | bbb
en | 2 | bab
在那个例子中,我需要检索这个结果:
es | 3 | aba
en | 2 | bab
将有一种语言的最后 2 个版本。我现在正在做这个查询:
Language.all.order('created_at desc').group(:locale)
但我得到:
es | 2 | aba
en | 1 | bab
有什么想法吗?提前致谢!
最佳答案
感谢大家的回答!这是结果!
第二个选项
即使第一个选项是正确的,在另一个评论之后,这是最终版本并且是我正在使用的版本(我认为这对我的环境更正确):
Language.all.group_by(&:locale).map{|s| s.last.last}
第一个选项
如果这对某人有帮助,这就是在蒂姆回答后对我有用的:
query = "SELECT lang1.* " +
"FROM languages lang1 INNER JOIN " +
"(" +
"SELECT l.locale, MAX(l.version) AS max_version " +
"FROM languages l " +
"GROUP BY l.locale" +
") lang2 " +
"ON lang1.locale = lang2.locale AND lang1.version = lang2.max_version"
languages = Language.find_by_sql(query)
也许在 ruby 中有更简洁的解决方案,但这会检索到正确的结果!
关于mysql - Rails 查询选择具有不同列的最后一条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31720799/