web-dev-qa-db-fra.com

Obtenez d'autres colonnes qui correspondent à la valeur MAX d'une colonne?

Ok, voici ma requête:

SELECT
  video_category,
  video_url,
  video_date,
  video_title,
  short_description,
  MAX(video_id) 
FROM
  videos
GROUP BY
  video_category

Quand il tire les données, j'obtiens la ligne correcte pour le video_id, mais il tire la première ligne pour chaque catégorie pour les autres. Ainsi, lorsque j'obtiens le résultat maximal pour le video_id de la catégorie 1, j'obtiens l'ID maximal, mais la première ligne du tableau pour l'URL, la date, le titre et la description.

Comment puis-je le faire extraire les autres colonnes qui correspondent au résultat max ID?

Modifier: corrigé.

SELECT
    *
FROM
    videos
WHERE
    video_id IN
    (
        SELECT
            DISTINCT
            MAX(video_id)
        FROM
            videos
        GROUP BY
            video_category
    ) 
ORDER BY
    video_category ASC
44
Devin

J'essaierais quelque chose comme ça:

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

ce qui est bien plus rapide que votre propre solution

39
Dalen

Voici une solution plus générale (gère les doublons)

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;
0
Guillaume Massé