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

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

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

Здравствуйте! Допустим, есть таблица с именем tbl с таким содержанием:
Листинг программы
  1. +----+------+------+
  2. | id | col1 | col2 |
  3. +----+------+------+
  4. | 1 | 1 | 10 |
  5. | 2 | 1 | 8 |
  6. | 3 | 2 | 105 |
  7. | 4 | 3 | 120 |
  8. | 5 | 1 | 15 |
  9. | 6 | 2 | 80 |
  10. | 7 | 3 | 150 |
  11. | 8 | 3 | 125 |
  12. +----+------+------+
Как получить col2 каждого col1 с наибольшим id (то есть последние записи для col1), чтобы получилась следующая выборка?
Листинг программы
  1. +----+------+------+
  2. | id | col1 | col2 |
  3. +----+------+------+
  4. | 5 | 1 | 15 |
  5. | 6 | 2 | 80 |
  6. | 8 | 3 | 125 |
  7. +----+------+------+

Решение задачи: «Получение последних записей»

textual
Листинг программы
  1. SELECT x.id, x.c1, x.c2
  2. FROM tst x
  3. JOIN (
  4.     SELECT a.c1, MAX(b.id) maxid
  5.     FROM tst a
  6.     JOIN tst b
  7.         ON b.id = a.id
  8.     GROUP BY a.c1
  9. ) y
  10.     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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы