[英]MySQL get the 2 last of each version in one table
我想檢索過程的最后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
IN (...)SELECT (SELECT SUBSTRING_INDEX(GROUP_CONCAT(
id
ORDER BY process_version
DESC), ',', 2) FROM process
WHERE process_name
= parent
. process_name
) AS ids
FROM process
AS parent WHERE 1 GROUP BY process_name
例如
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.