对于每条记录,还要为记录选择具有最高值的数据[重复]
Posted
技术标签:
【中文标题】对于每条记录,还要为记录选择具有最高值的数据[重复]【英文标题】:Per each record, select also the data with the highest value for the record [duplicate] 【发布时间】:2017-10-20 20:20:44 【问题描述】:晚上好,
我有以下两个表:
脚本
*----------------------------*
| user | script_id | name |
*----------------------------*
| 408 | 1 | script1 |
| 408 | 3 | script2 |
*----------------------------*
script_versions
*--------------------------------*
| id | version | script |
*--------------------------------*
| 1 | 1 | print "script1" |
| 1 | 2 | print "script2" |
| 3 | 0 | print "other1" |
| 3 | 1 | print "other2" |
*--------------------------------*
scripts
表包含有关脚本的一些常规信息,例如脚本的名称和所有者的用户 ID。表script_versions
包含每个脚本的所有不同版本的代码。
现在我想从数据库中检索:
我想获取给定 user
的所有脚本的最新版本(即最高的 version
数量)。
例如对于给定的数据,查询应该返回:
想要的结果
*-------------------------------------------------*
| id | version | script | user | name |
*-------------------------------------------------*
| 1 | 2 | print "script2" | 408 | script1 |
| 3 | 1 | print "other2" | 408 | script2 |
*-------------------------------------------------*
到目前为止我已经尝试过什么
这是我现在的查询。它不起作用,因为它并不总是选择所有脚本的最新版本(事实上,它目前总是选择最旧的)。
代码:
SELECT *
FROM scripts
LEFT
JOIN
( SELECT *
FROM script_versions
GROUP
BY id
ORDER
BY version DESC
) AS versions
ON scripts.script_id = versions.id
WHERE scripts.user = ?
编辑:
这个问题不是this question 的重复问题,因为提到的不是对结果进行排序/排序(按最新版本)。
【问题讨论】:
你为什么用php
标记这个?
@Xatenev 我正在 php 中实现查询,但如果你愿意,我可以删除它:)
如果 ORDER BY 子句正常工作,你为什么不简单地反转它,除了顺序错误。
@Xatenev 这并没有改变任何东西,我认为这是因为 GROUP BY
函数
您在编辑中的 cmets 不正确 - 这个问题完全是重复的,因为版本是您想要的最大版本。
【参考方案1】:
试试
select scripts.id, v.version, v.script, scripts.user, scripts.name
from scripts s
inner join
(select id, max(version) as version from script_versions group by id) aux
on aux.id = s.script_id
inner join script_versions v on v.id = aux.id and v.version = aux.version
where user = ?
【讨论】:
谢谢,除了一点拼写错误外,效果很好。你能接受我的编辑吗? :) 起来! :) 接受以上是关于对于每条记录,还要为记录选择具有最高值的数据[重复]的主要内容,如果未能解决你的问题,请参考以下文章