Получение последних записей - 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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д