Получение последних записей - MySQL

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! Допустим, есть таблица с именем tbl с таким содержанием:
+----+------+------+
| 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 |
+----+------+------+
Как получить col2 каждого col1 с наибольшим id (то есть последние записи для col1), чтобы получилась следующая выборка?
+----+------+------+
| 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.

  1. SELECT x.id, x.c1, x.c2
  2. FROM tst x
  3. 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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.833 из 5
Похожие ответы