0
votes

diviser une table en cinq par les valeurs d'un champ

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


0 commentaires

3 Réponses :


0
votes

Veuillez utiliser la requête ci-dessous,

 select code, max(id), result from table
group by code, result , type;


0 commentaires

0
votes
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

0 commentaires

0
votes

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


0 commentaires