我有一个看起来像这样的表:
| 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/