mysql - Rails 查询选择具有不同列的最后一条记录

标签 mysql sql ruby-on-rails activerecord

我需要进行查询以检索不同列的“最后”记录。

我有一个模型,语言,它有 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/

相关文章:

ruby-on-rails - 在设计中将名称属性添加到 `User`

php - 尝试在两个日期之间选择 mysql 表中的数据,但代码显示错误

sql - 如何修复使用 MySQL LOAD INFILE 时出现的错误?

java - 使用 Java 应用程序将电子邮件地址插入 MySQL

mysql - 使用 SELECT 从嵌套的 INSERT 语句中提取数据?

mysql - 优化 MySQL 中的 SELF JOIN。提示 "Lost Connection to MySQL server during Query"

ruby-on-rails - 我的Rails 3应用中的Metric-fu无法运行

javascript - 对 Rails 应用程序进行 d3.json 调用时收到 406 错误

php - 如何根据取件日期和归还日期进行搜索?

php - 文件正在上传,但 INSERT 未将位置添加到数据库