当前位置: 首页 > 知识库问答 >
问题:

MySQL在一个表中获取每个版本的最后两个

鲍建业
2023-03-14

我想检索进程的最后2个版本:

| id | name  | version | souce_id |
| 1  | test1 | 1.00    | 0        |
| 2  | test1 | 1.01    | 1        |
| 3  | test1 | 1.02    | 1        |
| 4  | test1 | 1.03    | 1        |
| 5  | test2 | 1.00    | 0        |
| 6  | test2 | 1.01    | 4        |
| 7  | test2 | 1.02    | 4        |
| 8  | test3 | 1.00    | 0        |

预期结果将是:

| id | name  | version | souce_id |
| 3  | test1 | 1.02    | 1        |
| 4  | test1 | 1.03    | 1        |
| 6  | test2 | 1.01    | 4        |
| 7  | test2 | 1.02    | 4        |
| 8  | test3 | 1.00    | 0        |

我写了这个查询,但我不喜欢它。。。我不能将它作为子查询包含在中,其中id位于(…)中<代码>从process中选择(从process\u name中选择子字符串索引(按process\u version顺序排列(idORDER BYORDER BYprocess\u versionprocess\u name作为父字符串,其中1个GROUP BYprocess\u name


共有2个答案

张高澹
2023-03-14

谢谢草莓!只需稍加修改,我就收到了我的请求(您的请求是提供2个第1版):

SELECT `x`.*, `y`.`id`
  FROM `my_table` AS `x`
  JOIN `my_table` AS `y`
    ON `y`.`name` = `x`.`name`
    AND `y`.`id` >= `x`.`id`
GROUP BY `x`.`id`
HAVING COUNT(*) <=2  
ORDER BY `x`.`name` ASC, `x`.`version` ASC
颜乐
2023-03-14

例如。

SELECT x.*
  FROM my_table x
  JOIN my_table y
    ON y.name = x.name
   AND y.id <= x.id
 GROUP
    BY x.id
 HAVING COUNT(*) <=2;
 类似资料:
  • 问题内容: 如何在where子句中使用下个月的第一天和最后一天? 问题答案: 采用:

  • 我需要一个MySQL函数,它可以在下面的SQL指令之后获取最后插入的id(不仅仅是最后一个)的列表: 更清楚地说,我想有这张桌子(我的桌子): 将在INSERT INTO语句之后复制新值,表现在显示如下: 此函数应返回以下列表:33,34,35 我认为一个临时解决方案是获取最后一个插入的id,然后根据复制的行数“手动”创建一个列表33、34、35。 但是我不知道是否存在SQL的本机函数!

  • rank ▲ ✰ vote url 61 374 45 700 url 获取列表最后一个元素 在Python里,如何获取一个列表的最后一个元素? some_list[-1]最短最Pythonic的方法. 事实上你可以用这个语法做好多事.some_list[-n]语法获取倒数第n个元素.所以some_list[-1]获取最后一个元素,some_list[-2]获取倒数第二个,等等.最后some_li

  • 问题内容: 我尝试过但失败了: 问题答案: 使用 GREATEST() 例如: 注意:每当那时任何单个值包含null时,此函数始终返回null(感谢用户@ sanghavi7)

  • 问题内容: 我有一张表如下 预期输出:name8,name7,name6,name3,name2 我希望在每个类别中显示最后2个条目吗?有人请帮帮我。谢谢你的放心。 问题答案: 这些类型的结果最好由其他RDBMS中的窗口函数来处理,但是不幸的是Mysql没有任何窗口函数,因此作为替代方案,存在一种使用用户定义的变量为属于同一组的行分配等级的解决方案。 上面的查询将为您提供每个类别2条最近记录(基于

  • 问题内容: 我有一个包含足球比赛结果的MySQL数据库,并且只想检索该数据的特定子集。 数据由一个包含MatchDate,HomeTeam,AwayTeam,HomeGoals,AwayGoals的表组成 如何检索包含每个团队参与的最近6场比赛的数据的子集? 虽然我可以为单个团队执行此操作,但是如何获得一个包含表中每个团队的最后6个匹配项的子集?(我不担心该子集可能包含一些重复项)。 问题答案: