对于每条记录,还要为记录选择具有最高值的数据[重复]

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 = ?

【讨论】:

谢谢,除了一点拼写错误外,效果很好。你能接受我的编辑吗? :) 起来! :) 接受

以上是关于对于每条记录,还要为记录选择具有最高值的数据[重复]的主要内容,如果未能解决你的问题,请参考以下文章

SQL:查找每组的最大记录[重复]

SQL:查找每组的最大记录[重复]

根据日期仅选择每条记录的最新版本 | MS Access [重复]

从列中选择子字符串,但每条记录都有不同的模式

选择具有每天每条记录的创建顺序的行

如何选择重复的最高记录并创建新表?