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;