Вывод 2 последних значений из группировки - MySQL

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

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

Доброго времени суток, помогите разобраться, всю голову сломал уже. Нужно сгруппировать элементы по колонке Name и вывести 2 последних из группы, отсортированных по дате. Таблица вида: id | name | date | money 1 | Костя | 2016-05-10 | 200 2 | Костя | 2016-05-11 | 300 3 | Игорь | 2016-05-09 | 800 4 | Костя | 2016-05-12 | 100 5 | Игорь | 2016-05-11 | 200 6 | Павел | 2016-05-06 | 400 7 | Игорь | 2016-05-18 | 700 Должно получится так: Костя | 2016-05-12 | 100 Костя | 2016-05-11 | 300 Игорь | 2016-05-18 | 700 Игорь | 2016-05-11 | 200 Павел | 2016-05-06 | 400 Смог сделать только группировку, сортировку по последней дате и вывод одной записи:
SELECT * FROM (SELECT id,name,DATE,money FROM sp_data
ORDER BY DATE DESC) AS temp
GROUP BY name ORDER BY DATE DESC

Решение задачи: «Вывод 2 последних значений из группировки»

textual
Листинг программы
SELECT t1.id, t1.name, t1.date, t1.money, COUNT(*) AS counter 
FROM sp_data t1 JOIN sp_data t2 ON t1.name = t2.name AND t1.id <= t2.id GROUP BY t1.name, t1.date 
HAVING counter <= 2 ORDER BY name, DATE DESC

Объяснение кода листинга программы

В данном коде выполняется группировка данных по имени и дате, затем происходит подсчет количества записей в каждой группе. После этого, из каждой группы выбираются две последние записи по дате. Результатом запроса является список с id, именем, датой, деньгами и количеством записей в группе.

  1. SELECT - выбираем нужные поля из таблицы t1.id, t1.name, t1.date, t1.money, COUNT(*) AS counter
  2. FROM - указываем таблицы, которые нужно объединить sp_data t1 JOIN sp_data t2 ON t1.name = t2.name AND t1.id <= t2.id
  3. GROUP BY - группируем данные по имени и дате GROUP BY t1.name, t1.date
  4. HAVING - применяем условие к группам HAVING counter <= 2
  5. ORDER BY - сортируем результаты по имени и дате в обратном порядке ORDER BY name, DATE DESC

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


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

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

6   голосов , оценка 3.833 из 5