#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 Ознакомьтесь с объяснением, которое я только что добавил.