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 »
Isaac
Mai 5, 2022, 6:05
4
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 »
Henri
Mai 5, 2022, 6:09
5
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 »