Sélectionner la valeur max, mais pour plusieurs lignes SQL

J’ai la table suivante pour sauvegader des textes (version simplifiée) :

id occ texte
1 1 lorem ipsum
2 1 lorem ipsum
1 2 lorem ipsum
1 3 lorem ipsum

Comment sélectionner une ligne par id et seulement le plus grand occ ?

Avec les données ci-dessus, le résultat devrait contenir deux lignes :

id occ texte
1 3 lorem ipsum
2 1 lorem ipsum

J’utilise MySQL.

Il vous suffit d’une clause GROUP BY avec la fonction d’agrégation MAX :

SELECT id, MAX(occ)
FROM your_table
GROUP BY id
1 « J'aime »

Vous pouvez aussi le faire en utilisant la clause IN, essayez ceci :

SELECT * 
FROM your_table WHERE (id, occ) IN 
( SELECT id, MAX(occ)
  FROM your_table
  GROUP BY id
)
1 « J'aime »

Une autre solution consiste à utiliser une sous-requête corrélée :

select t.id, t.occ, t.texte
    from your_table t
    where occ = 
        (select max(occ) from your_table tt where t.id=tt.id)

Le fait d’avoir un index sur (id,occ) rend la sous-requête presque aussi simple.

1 « J'aime »

Veuillez essayer l’exemple suivante:

SELECT your_table.id, occ, texte
FROM your_table
INNER JOIN (
    SELECT id, max(occ) as maxocc
    FROM your_table
    GROUP BY id
) AS child ON (your_table.id = child.id) AND (your_table.occ = maxocc)
1 « J'aime »