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

MySQL在一个表中获取每个版本的最后两个,mysql,Mysql,我想检索流程的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

我想检索流程的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 | 我写了这个查询,但我不喜欢它。。。我不能将它作为子查询包含在WHERE-id中。。。。 选择“按流程选择子字符串\u索引组\u CONCATid顺序”\u版本描述“,”,2从流程中选择,其中流程名称=父级。流程名称作为ID从流程作为父级,其中1按流程名称分组” 例如

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;
谢谢草莓! 只需稍加修改,我就收到了您的请求,即提供了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

看来你需要最后5张唱片。我说的对吗?@developer先生,这个解决方案是有缺陷的。另外,如果你没有在收件人的名字中包含@,那么他们不会像我一样看到评论——直到现在。