Получение последних записей - MySQL
Формулировка задачи:
Здравствуйте! Допустим, есть таблица с именем tbl с таким содержанием:
Как получить col2 каждого col1 с наибольшим id (то есть последние записи для col1), чтобы получилась следующая выборка?
+----+------+------+ | id | col1 | col2 | +----+------+------+ | 1 | 1 | 10 | | 2 | 1 | 8 | | 3 | 2 | 105 | | 4 | 3 | 120 | | 5 | 1 | 15 | | 6 | 2 | 80 | | 7 | 3 | 150 | | 8 | 3 | 125 | +----+------+------+
+----+------+------+ | id | col1 | col2 | +----+------+------+ | 5 | 1 | 15 | | 6 | 2 | 80 | | 8 | 3 | 125 | +----+------+------+
Решение задачи: «Получение последних записей»
textual
Листинг программы
SELECT x.id, x.c1, x.c2 FROM tst x JOIN ( SELECT a.c1, MAX(b.id) maxid FROM tst a JOIN tst b ON b.id = a.id GROUP BY a.c1 ) y ON y.maxid = x.id
Объяснение кода листинга программы
В данном коде происходит выборка данных из таблицы tst
по определенным столбцам: id
, c1
, c2
.
Однако, чтобы получить последние записи, используется подзапрос с функцией агрегирования MAX, которая выбирает максимальное значение столбца id
для каждой группы строк, объединенных по столбцу c1
.
Далее, в основном запросе, происходит объединение таблицы tst
с результатом подзапроса по столбцу id
, чтобы получить последние записи для каждой группы строк, определенных по столбцу c1
.
- SELECT x.id, x.c1, x.c2
- FROM tst x
- JOIN ( SELECT a.c1, MAX(b.id) maxid FROM tst a JOIN tst b ON b.id = a.id GROUP BY a.c1 ) y ON y.maxid = x.id
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д