【发布时间】:2018-09-14 12:53:03
【问题描述】:
我有以下表格:
应用程序
TYPE_ID | BUILD_ID | CONFIG_ID | VERSION_ID | (All foreign keys to the respective tables)
1 | 1 | 1 | 1 |
1 | 1 | 1 | 2 |
2 | 2 | 3 | 3 |
2 | 2 | 3 | 4 |
版本
ID | major | minor | patch
1 | 1 |0 |1
2 | 2 |0 |0
3 | 3 |0 |3
4 | 4 |0 |0
我需要从Apps 表中为TYPE_ID、BUILD_ID 和CONFIG_ID 的每个唯一组合选择最高版本的行。
版本号应按版本表中MAX(major * 1000000 + minor * 1000 + patch)计算。
因此,根据Apps 表的给定示例,结果将是:
TYPE_ID | BUILD_ID | CONFIG_ID | VERSION_ID |
1 | 1 | 1 | 2 |
2 | 2 | 3 | 4 |
尝试过这样的事情:
SELECT p1.* FROM Apps p1
INNER JOIN (
SELECT max(VERSION_ID) MaxVersion, CONFIG_ID
FROM Apps
GROUP BY CONFIG_ID
) p2
ON p1.CONFIG_ID = p2.CONFIG_ID
AND p1.VERSION_ID = p2.MaxVersion
GROUP BY `TYPE_ID`, `BUILD_ID`, `CONFIG_ID`
但MAX 应用于VERSION_ID,我需要MAX 应用于major、minor 和patch 组合。
MySQL 版本 15.1 分发版 5.5.56-MariaDB
任何帮助将不胜感激。
干杯!
【问题讨论】:
-
你使用的是什么 MySQL 版本?
-
您的预期结果有版本 id(或者,版本号?)
-
max(x * y * x ...)解决问题了吗? -
@Mureinik 查看编辑。
-
@MariusKurgonas 请检查stackoverflow.com/a/52332488/2469308