mysql - 在单个查询中捕获一列具有最高值的记录?

标签 mysql ruby-on-rails

我有一个看起来像这样的表:

| id | fk1 | fk2 | version |
|  1 |  1  |  1  |    1    |
|  2 |  1  |  1  |    2    |
|  3 |  1  |  1  |    3    |

手头有 fk1 和 fk2 的值,我试图获得版本值最高的记录。目前我正在做的是:

version = Project.where("fk1= ? AND fk2= ?", params.require(:fk1), params.require(:fk2)).maximum(:version)
@project = Project.find_by_fk1_and_fk2_and_version(params.require(:fk1), params.require(:fk2), version)

这让我得到了正确的记录,但我必须执行 2 次查询来查询理论上看起来非常简单的东西,但在尝试了很多不同的事情之后,我没有运气用一个查询来做这件事。我设想的是这样的:

version = Project.where("fk1= ? AND fk2= ? AND max(version)", params.require(:fk1), params.require(:fk2))

或者什么的。

最佳答案

那么 Rails 的方法是

Project.where(fk1: params.require(:fk1), fk2: params.require(:fk2)).
  order('version desc').first

转换为如下的 sql 查询:

SELECT * FROM projects WHERE fk1 = "fk1" AND fk2 = "fk2" ORDER BY version DESC LIMIT 1;

关于mysql - 在单个查询中捕获一列具有最高值的记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32233645/

相关文章:

mysql - 如何删除不存在的外键约束?

java - 用键插入android数据库

ruby-on-rails - 在 Heroku 上使用 Resque 的后台作业

ruby-on-rails - Gemfile 中的 Ruby 版本

mysql - Ruby on Rails 5.2如何解决root用户上的mysql访问被拒绝的问题?

mysql - 在 mysql 中添加外键和引用键时出现错误

mysql - EntityFramework异常: How can i see the real query

php - 我应该使用什么数据类型将电子邮件存储在 mysql 数据库中?

ruby-on-rails - Rails 将 auth_token 渲染到 API 响应 header

ruby-on-rails - 我是否正确地重新索引了这个 Sphinx 索引?