MySQL Получение последних 5 записей для каждого идентификатора в операторе SELECT — WHERE IN

Я хотел бы выбрать последние 5 записей для каждого идентификатора в инструкции SELECT — WHERE IN.

//How to get last 5 entries for each id
SELECT * FROM table1
WHERE id IN (111,222,333,.....)
ORDER BY date DESC
LIMIT 5

РЕДАКТИРОВАТЬ: Пример того, как структура данных

id  date    name
111 7-Nov   Anna
111 8-Nov   Belle
111 9-Nov   Mary
111 10-Nov  John
111 11-Nov  Robert
111 12-Nov  Gary
111 13-Nov  Rick
222 8-Apr   Sarah
222 9-Apr   Lee
222 10-Apr  Margaret
222 11-Apr  Lisa
222 12-Apr  Will
222 13-Apr  Alex
222 14-Apr  Kelly
222 15-Apr  Lucas

Желаемые результаты

id  date    name
111 13-Nov  Rick
111 12-Nov  Gary
111 11-Nov  Robert
111 10-Nov  John
111 9-Nov   Mary
222 15-Apr  Lucas
222 14-Apr  Kelly
222 13-Apr  Alex
222 12-Apr  Will
222 11-Apr  Lisa

Я не уверен, что это можно сделать в MySQL. Я попытался посмотреть на некоторые ответы, и я не могу найти ответы.

-1

Решение

Это просто псевдокод, но я думаю, что это работает. попробуй это

ВЫБРАТЬ

Я бы,

SUBSTRING_INDEX (GROUP_CONCAT (some_column_1 ORDER BY date DESC), ‘,’, 5)

SUBSTRING_INDEX (GROUP_CONCAT (some_column_2 ORDER BY date DESC), ‘,’, 5)

….

ИЗ таблицы ГДЕ id IN (111,222,333, …..) GROUP BY id;

это выглядит не так, как вы хотите. Я просто показываю, как использовать функции GROUP_CONCAT и SUBSTRING_INDEX, вы примените это, вы можете найти ответ.

0

Другие решения

это не имеет особого смысла, но если ваша mysql-версия поддерживает это, вы можете сделать это с помощью подзапроса:

SELECT * FROM `table1`
WHERE `id` IN (SELECT `id` FROM `table1` ORDER BY `date` DESC LIMIT 5)
0

По вопросам рекламы [email protected]