Получить другие столбцы, которые соответствуют значению MAX одного столбца? - PullRequest
42 голосов
/ 24 июля 2011

Хорошо, это мой запрос:

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

Ответы [ 2 ]

36 голосов
/ 24 июля 2011

Я бы попробовал что-то вроде этого:

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

, что намного быстрее, чем ваше собственное решение

0 голосов
/ 28 апреля 2019

Вот более общее решение (обрабатывает дубликаты)

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;
...