Результат, который возвращает несколько групп на основе идентификатора и даты

#mysql #subquery #greatest-n-per-group

#mysql #подзапрос #наибольшее число на группу

Вопрос:

У меня есть простая таблица под названием «сообщение», состоящая из столбца «идентификатор» и столбца «дата». Может быть несколько идентификаторов с одинаковым значением. Я ищу запрос, который возвращает до трех по каждому идентификатору, и из этих трех они должны быть с наибольшими датами.

Таким образом, запрос выдал бы что-то вроде этого:

 id | date
--- -------------------
36  2011-04-01 08:41:19
36  2011-04-17 08:05:18
36  2011-04-17 18:48:49
39  2011-03-31 05:45:15
39  2011-03-31 05:50:07
39  2011-03-31 05:56:23
41  2011-04-11 07:02:27
41  2011-04-19 02:31:31
41  2011-04-19 02:32:53
etc...
  

У меня возникли проблемы с выяснением этого.

Ответ №1:

 select * from table as t1
where (select count(*) from table as t2
       where t1.id = t2.id and t2.date > t1.date) < 3
order by id, date desc