Сортировка групп данных с учетом новейшей записи

#mysql

#mysql

Вопрос:

У меня есть таблица с двумя столбцами team и date . В date столбце указана дата добавления записи в таблицу.

Я хочу распечатать последние 10 записей каждой команды, отсортированных по date DESC . Я также хочу отсортировать эти группы записей команды по date DESC .

Я много чего перепробовал, но безуспешно. Это сработало, но с 2 запросами, что в данном случае неприемлемо.

Как я могу сделать это с помощью одного запроса? У меня такое чувство, что это действительно вопрос новичка.

Комментарии:

1. какие данные вы получаете сейчас и что именно вы хотите. пожалуйста, обновите свой вопрос

Ответ №1:

 SELECT rows.team, rows.date FROM (
  SELECT team, date,
    IF( @prev <> team, @rownum := 1, @rownum := @rownum 1 ) AS rownum,
    @prev := team
  FROM my_table
  JOIN (SELECT @rownum := NULL, @prev := 0) AS init
  ORDER BY team, date DESC
) AS rows
WHERE rownum <= 10
  

Мы создаем временную (виртуальную) таблицу в подзапросе со строками, упорядоченными по team, date DESC, и мы начинаем сверху, предоставляя увеличивающийся номер строки для каждой строки, и всякий раз, когда команда изменяется, мы сбрасываем номер строки, затем во внешнем запросе мы отфильтровываем любую строку, номер строки которой большеболее 10.

Комментарии:

1. Это работает. Теперь я должен понять, что здесь происходит. Спасибо.

2. @mesckech Ознакомьтесь с объяснением, которое я только что добавил.