Как получить правильную сортировку при группировке?

Есть исходные данные отсортированные по ID

id book_id
306 51
305 48
304 51
303 48
302 51
301 51
300 13

MySQL: SELECT id, book_id FROM chapters ORDER BY id DESC LIMIT 5;

Laravel: Chapter::select('id', 'book_id')->orderBy('id', 'DESC')->take(5)->get();

Сейчас всё правильно, но без группировки.

Добавляем группировку в запрос:

MySQL: SELECT id, book_id FROM chapters group by book_id ORDER BY id DESC LIMIT 5;

Laravel: Chapter::select('id', 'book_id')->groupBy('book_id')->orderBy('id', 'DESC')->take(5)->get();

И получаем на выходе

id book_id
303 48
301 51
300 13
... ...

Вопрос: Как построить запрос так (MySQL or Laravel), что бы на выходе получить именно отсортированные по "id" и при этом без дубликатов "book_id" ?

То есть относительно исходной таблицы, нужно получить что-то такое:

id book_id
306 51
305 48
300 13
... ...

Ответы (1 шт):

Автор решения: Superproger77
-- Создаем таблицу
CREATE TABLE chapters (
  id INTEGER PRIMARY KEY,
  book_id INTEGER NOT NULL
);

-- Добавляем данные в таблицу
INSERT INTO chapters (id, book_id) VALUES
(306,   51),
(305,   48),
(304,   51),
(303,   48),
(302,   51),
(301,   51),
(300,   13)
;

-- Выборка данных
SELECT 
    max(id) as id, 
    book_id 
FROM 
    chapters 
GROUP BY 
    book_id 
ORDER BY
    id DESC;
→ Ссылка