Je suis assez nouveau dans SQL et je suis confronté à cette question.
J'ai ce champ appelé "type" qui se compose de 5 réponses différentes, "A", "B", "C", " D ',' E '. Et chacun de ceux-ci peut avoir un "résultat", "oui" ou "non".
Le tableau ressemble à ceci
id code type result 1 100 A no 2 100 A yes 3 100 A no 4 100 B yes 5 100 B yes 6 500 B yes 7 500 B yes 8 200 A yes 9 200 A yes 10 100 C no 11 100 C yes 12 200 B yes 13 500 B yes 14 500 C yes
avec le max ( id) étant le résultat le plus récent pour chaque type par code.
Je souhaite obtenir quelque chose comme ceci,
Tableau pour le type A:
résultat code max (id)
100 3 non
200 9 oui
Tableau pour le type B:
résultat code max (id)
100 5 oui
500 13 oui
et ainsi de suite (tableaux pour les autres types).
J'ai besoin de votre aide!
Merci, Ioanna
3 Réponses :
Veuillez utiliser la requête ci-dessous,
select code, max(id), result from table group by code, result , type;
select your_table.* from your_table
join (
select max(ad) maxid from your_table
group by type, result
) t on your_table.id = t.maxid
Une manière canonique de faire cela utilise une sous-requête corrélée:
select t.*
from (select t.*,
row_number() over (partition by type, code order by id desc) as seqnum
from t
) t
where seqnum = 1;
En particulier, cela peut tirer parti d'un index sur (type, code, id) est souvent bien optimisé dans de nombreuses bases de données.
L'autre méthode courante consiste à utiliser les fonctions de fenêtre:
select t.* from t where t.id = (select max(t2.id) from t t2 where t2.type = t.type and t2.code = t.code);