MySQL Group by, порядок по двум столбцам

Я хочу получить название последнего эпизода каждого фильма

Структура таблицы:

+---------+------------+---------------+
|     id  |  movie_id  |  episode_name |
+---------+------------+---------------+
|      1  |         1  |             1 |
|      2  |         1  |             2 |
|      3  |         1  |             3 |
|      4  |         2  |             1 |
|      5  |         3  |             1 |
|      6  |         2  |             2 |
|      7  |         1  |             4 |
|      8  |         2  |             3 |
|      9  |         4  |             1 |
+---------+------------+---------------+

Запрос 1:

SELECT * FROM episode
group by movie_id
order by id desc, episode_name desc LIMIT 10

Запрос 2:

SELECT * FROM episode
WHERE movie_id IN (select movie_id from episode group by movie_id)
group by movie_id
order by episode_name desc

Но вывод не то, что я хочу, может быть, я делаю это неправильно

+--------+------------+---------------+
|  id    |  movie_id  |  episode_name |
+--------+------------+---------------+
|     9  |         4  |             1 |
|     5  |         3  |             1 |
|     4  |         2  |             1 |
|     1  |         1  |             1 |
+--------+------------+---------------+

Мой желаемый результат:

+---------+------------+---------------+
|     id  |  movie_id  |  episode_name |
+---------+------------+---------------+
|      9  |         4  |             1 |
|      8  |         2  |             3 |
|      7  |         1  |             4 |
|      5  |         3  |             1 |
+---------+------------+---------------+

2

Решение

Это довольно распространенная проблема, которую мы можем решить в MySQL, присоединившись к episode таблица подзапрос, который находит последний эпизод для каждого фильма. Этот подход дает нам полное соответствие последних записей, в том числе id столбец, который мы можем затем использовать для упорядочения набора результатов.

SELECT e1.*
FROM episode e1
INNER JOIN
(
SELECT movie_id, MAX(episode_name) AS max_episode_name
FROM episode
GROUP BY movie_id
) e2
ON e1.movie_id = e2.movie_id AND
e1.episode_name = e2.max_episode_name
ORDER BY
e1.id DESC;

демонстрация

4

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

Если вам нужен только последний эпизод_имя и если я следую логике вашей таблицы, вы можете попытаться использовать MAX () в своем запросе SELECT, поэтому вы получите только максимальный результат для вашего столбца «episode_name» (информация о режиме) Вот)

SELECT id, movie_id, MAX(episode_name)
FROM table GROUP BY movie_id
ORDER BY id DESC

Это то, что вы ищете?

2

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