Хорошо, вот моя таблица:
product_id version_id update_id patch_id
1 1 0 0
1 1 1 0
1 1 1 1
1 1 2 0
1 1 2 1
2 1 0 0
2 2 0 0
2 3 0 0
2 3 0 1
3 1 0 0
3 1 0 1
Теперь я хочу выбрать последнюю версию продукта, поэтому версия с наивысшим значением update_id и patch_id.
Например, последняя версия
- продукт 1 должен возвращать 1, 2, 1
- продукт 2 должен возвращать 3, 0, 1
- продукт 3 должен возвращать 1, 0, 1
Я пробовал всевозможные вещи с GROUP BY и HAVING, пытался подзапросы, но я до сих пор не могу понять, как это сделать.
Может кто-нибудь помочь мне найти правильный запрос, или мне следует написать для этого функцию php?
Изменить
Дополнительная информация: - Столбцы вместе являются первичным ключом (есть больше колонок, но для этой проблемы они не имеют значения) - Ни один из столбцов не является автоматическим приращением
Это таблица:
CREATE TABLE IF NOT EXISTS `db`.`patch` (
`product_id` INT NOT NULL ,
`version_id` INT NOT NULL ,
`update_id` INT NOT NULL ,
`patch_id` INT NOT NULL
PRIMARY KEY (`product_id`, `version_id`, `update_id`, `patch_id`) ,
INDEX `fk_patch_update1` (`product_id` ASC, `version_id` ASC, `update_id` ASC) )
Изменить 2
Помечено как дубликат, это не так: другой вопрос ищет записи, превышающие значение для любого из трех разных столбцов.
В этом вопросе мы ищем наивысший номер версии, сгруппированный по product_id.
Изменить 3
Ответ rgz снова говорит мне, что это дубликат. Прежде всего: этот вопрос старше. Во-вторых, я не думаю, что ответ тот же.
rgz предлагает использовать следующий запрос:
SELECT product_id, GREATEST(version_id, update_id, patch_id) AS latest_version FROM patch.
БОЛЬШЕ (1,2,3) возвращает 3, правильно? Ват, если у нас есть эти значения:
product_id version_id update_id patch_id
1 1 0 0
1 1 2 8
1 3 0 0
Как я понимаю, этот запрос wil возвращает:
product_id latest_version
1 1
1 8
1 3
Но он должен вернуться:
product_id version_id update_id patch_id
1 3 0 0
Я не думаю, что БОЛЬШОЙ может помочь. Если вы считаете, что это произойдет, пожалуйста, подтвердите, что я ошибаюсь.