Страницы

Поиск по вопросам

вторник, 9 октября 2018 г.

MySQL: получить наибольше значение из каждой группы

Тестовая структура:
CREATE TABLE b ( id INT, data TEXT );
CREATE TABLE s ( id INT, b_id INT, time INT );
INSERT INTO b VALUES (1, 2); INSERT INTO b VALUES (2, 3);
INSERT INTO s VALUES (1, 1, 3); INSERT INTO s VALUES (2, 1, 2); INSERT INTO s VALUES (3, 1, 9); INSERT INTO s VALUES (4, 2, 8); INSERT INTO s VALUES (5, 2, 4); INSERT INTO s VALUES (6, 2, 5);
Задача:
В один запрос, для каждого id из b получить из s значение с максимальным значением поля time
Ожидаемый вывод здесь:
+------+------+------+------+-----------+ | id | data | b_id | sid | time | +------+------+------+------+-----------+ | 1 | 2 | 1 | 3 | 9 | | 2 | 3 | 2 | 4 | 8 | +------+------+------+------+-----------+
(имена столбцов не существенны. Пример приведен для упрощения понимая задачи)
Чего смог сам(ну, я пытался)
select b.id as bid, b.data, s.time, s.b_id from b b inner join s s on b.id=s.b_id order by s.time DESC; +------+------+------+------+ | bid | data | time | b_id | +------+------+------+------+ | 1 | 2 | 9 | 1 | | 2 | 3 | 8 | 2 | | 2 | 3 | 5 | 2 | | 2 | 3 | 4 | 2 | | 1 | 2 | 3 | 1 | | 1 | 2 | 2 | 1 | +------+------+------+------+ 6 rows in set (0.00 sec)
ВАЖНО в субд ожидается включенный режим sql_mode=only_full_group_by


Ответ

SELECT b.*, (SELECT MAX(s.`time`) FROM s WHERE s.`b_id` = b.`id` ) AS max_s_time FROM b

Комментариев нет:

Отправить комментарий