У меня есть следующие таблицы:
Приложения
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
Любая помощь приветствуется.
Приветствия!