Получить другие столбцы, соответствующие значению 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;