MySql. Запрос на вывод строк по условию

Доброе время суток!

Дано: таблица

Client(ID, ID_client, Model, Service, ODO)

ID - с автоинкремент.

И простое наполнение таблицы:

INSERT INTO `car` (`ID`, `ID_client`, `Model`, `TO`, `ODO`) VALUES
(1, '1', 'VW GOLF', 'YES', '12500'),
(2, '2', 'AUDI Q7', 'NO', '5650'),
(3, '3', 'VW Beetle', 'NO', '13850'),
(4, '4', 'MAZDA 3', 'YES', '28450'),
(5, '5', 'HONDA CIVIC', 'NO', '8850'),
(6, '6', 'LADA TURBO xD', 'NO', '1500'),
(7, '7', 'VW TIGUAN', 'NO', '3650'),
(8, '3', 'VW Beetle', 'NO', '16650'),
(9, '5', 'HONDA CIVIC', 'YES', '14580'),
(10, '2', 'AUDI Q7', 'YES', '11580'),
(11, '1', 'VW GOLF', 'NO', '20250'),
(12, '6', 'LADA TURBO :D', 'YES', '88500'),
(13, '1', 'VW GOLF', 'YES', '21520'),
(14, '2', 'AUDI Q7', 'NO', '11800'),
(15, '5', 'HONDA CIVIC', 'YES', '21000'),
(16, '4', 'MAZDA 3', 'YES', '33650'),
(17, '7', 'VW TIGUAN', 'YES', '8900'),
(18, '6', 'LADA TURBO xD', 'YES', '98500'),
(19, '1', 'VW GOLF', 'NO', '22580'),
(20, '3', 'VW Beetle', 'YES', '18687');

Необходимо сделать запрос, который покажет последнее "тех.обслуживание" каждого автомобиля. С сортировкой по ID_client и WHERE `Service` LIKE 'YES'

На выходе должно получиться что-то вроде:

ID  ID_client  Model            Service  ODO
20  3          VW Beetle        YES      18687
16  4          MAZDA 3          YES      33650
15  5          HONDA CIVIC      YES      21000
18  6          LADA TURBO :D    YES      98500
17  7          VW TIGUAN        YES      8900

Да, прекрасно понимаю что такая таблица это просто глупо, да и метод не "алло". Все происходит в рамках одной таблицы.


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

Автор решения: HTMLProgrammer
SELECT * FROM `car` WHERE `Service`='YES' ORDER BY `ID_client`;
→ Ссылка
Автор решения: Akina
WITH cte AS ( SELECT *, ROW_NUMBER() OVER (PARTITION BY id_client ORDER BY id DESC) rn
              FROM car
              WHERE `TO` = 'YES' )
SELECT ID, ID_client, Model, `TO`, ODO
FROM cte
WHERE rn = 1
ORDER BY ID_client;

fiddle

→ Ссылка