Задать вопрос
SerafimArts
@SerafimArts
Senior Notepad Reader

Как сгруппировать записи по максимальному значению в целле?

Есть таблица, примерно следующего вида:
| title | version | identity |
|-------|---------|----------|
| Av1   | 1       | some     |
| Av2   | 2       | some     |
| Bv1   | 1       | any      |
| Bv2   | 2       | any      |
| Bv3   | 3       | any      |


Где "title" - просто рандомный заголовок для примера, "version" - инкрементируемое поле, указывающее на более новую версию из серии, "identity" - идентификатор записи (т.е. некоторый идентификатор, который указывает что N является одним и тем же элементом, но отличается лишь номером версии и как следствие - некоторыми другими вещами)

Пытаюсь составить простой запрос, который получал бы результат следующего вида:
| Av2 | 2 | some |
| Bv3 | 3 | any  |


Т.е. самая последняя версия (version) из серии (group by identity).

Естественно такой запрос не работает в случае моськи (что и требуется), хотя на sqlite воспроизводится:
SELECT * FROM mytable GROUP BY identity ORDER BY version DESC;

* Предполагаю, что в результат группировки попадёт самый первый вариант (а они сортируются по version в обратном порядке).

А дальше я не представляю уже как без подзапросов. Есть идеи как зафигачить подобный запрос в виде простой выборки без подзапросов?
  • Вопрос задан
  • 134 просмотра
Подписаться 1 Оценить Комментировать
Решения вопроса 2
sergey-gornostaev
@sergey-gornostaev Куратор тега SQL
Седой и строгий
SELECT mt.* FROM mytable AS mt
INNER JOIN (
    SELECT MAX(version) AS max_version FROM mytable GROUP BY identity
) AS grp
ON mt.identity = grp.identity AND mt.version = grp.max_version;
Ответ написан
Комментировать
SerafimArts
@SerafimArts Автор вопроса
Senior Notepad Reader
Проблема решена реструктуризацией БД. Всем спасибо за помощь.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
AloneCoder
@AloneCoder
[object Object]
select * from ( select * from mytable order by version desc ) as a group by identity
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы