Получить другие столбцы, соответствующие значению MAX одного столбца?
Хорошо, это мой запрос:
SELECT
video_category,
video_url,
video_date,
video_title,
short_description,
MAX(video_id)
FROM
videos
GROUP BY
video_category
Когда он извлекает данные, я получаю правильную строку для video_id, но она вытягивает первую строку для каждой категории для остальных. Поэтому, когда я получаю максимальный результат для video_id категории 1, я получаю максимальный идентификатор, но в первой строке таблицы указываются URL, дата, заголовок и описание.
Как сделать так, чтобы он вытягивал другие столбцы, которые соответствуют максимальному результату ID?
Редактировать: Исправлено.
SELECT
*
FROM
videos
WHERE
video_id IN
(
SELECT
DISTINCT
MAX(video_id)
FROM
videos
GROUP BY
video_category
)
ORDER BY
video_category ASC
Ответы
Ответ 1
Я бы попробовал что-то вроде этого:
SELECT
s.video_id
,s.video_category
,s.video_url
,s.video_date
,s.video_title
,short_description
FROM videos s
JOIN (SELECT MAX(video_id) AS id FROM videos GROUP BY video_category) max
ON s.video_id = max.id
что довольно быстро, что ваше собственное решение
Ответ 2
Вот более общее решение (обрабатывает дубликаты)
CREATE TABLE test(
i INTEGER,
c INTEGER,
v INTEGER
);
insert into test(i, c, v)
values
(3, 1, 1),
(3, 2, 2),
(3, 3, 3),
(4, 2, 4),
(4, 3, 5),
(4, 4, 6),
(5, 3, 7),
(5, 4, 8),
(5, 5, 9),
(6, 4, 10),
(6, 5, 11),
(6, 6, 12);
SELECT t.c, t.v
FROM test t
JOIN (SELECT test.c, max(i) as mi FROM test GROUP BY c) j ON
t.i = j.mi AND
t.c = j.c
ORDER BY c;