le plus grand d'une liste (trois tables en jeu) - SQL/NoSQL - Programmation
Marsh Posté le 16-08-2009 à 12:46:29
déja avec un join c'est mieux, et du coup ca donne
Code :
|
Marsh Posté le 16-08-2009 à 19:42:20
pataluc a écrit : déja avec un join c'est mieux, et du coup ca donne
|
Merci pataluc pour ta proposition. je l'ai essayé mais le souci c'est que la note obtenue ne sera pas forcément celle de l'étudiant.
Je crois avoir trouvé : j'ai fait un select avec une jointure comme toi (a peu près) puis pour éviter le souci de correspondance note/étudiant j'ai fait un Having avec une clause Select à l'intérieur
Voilà la solution que j'ai trouvée, en fait il ne s'agissait pas d'examen mais d'étudiant inscrits dans une spécialité de licence pro à une date donnée (comme c'est compliqué j'ai expliqué le pb + simple mais équivalent avec examen (désolé). ETU_SPE correspond à examen, etu_spe_spe_id correspondrait à la note
Voilà ma soluce :
SELECT etu_nom, ETU_SPE_spe_id, etu_spe_date_dbt
FROM etudiant e1, etu_spe es1
WHERE etu_mysql = `ETU_SPE_etu_id`
GROUP BY etu_mysql, etu_spe_spe_id
HAVING etu_spe_date_dbt = (
SELECT max( es2.etu_spe_date_dbt )
FROM etudiant e2, etu_spe es2
WHERE e1.etu_mysql = e2.etu_mysql
AND e2.etu_mysql = es2.etu_spe_etu_id )
LIMIT 0 , 60
Merci encore
Marsh Posté le 17-08-2009 à 08:56:46
ben écoute, chez moi ca marche, mais le petit jeu de données que je me suis créé pour tester (3 etud, 3 matiere, 4 exam) n'est peut être pas suffisamment représentatif...
Marsh Posté le 16-08-2009 à 00:07:12
bonjour à tous,
j'ai une table étudiant
une table matière
les étudiants passent des examens (un ou plusieurs pour les matières)
Paul a passé un examen de SQL : le 15.11.2008, il a eu 11/20
Paul a passé un examen de SQL : le 20.01.2009 il a eu 15/20
et ainsi de suite
table étudiant : id étudiant, nom, prenom
table matiere : id matière, désignation
table examen : id étudiant, id matiere, date, note
Peut-on écrire une requete SQL qui me donne la liste des étudiants avec pour chacun d'entre eux uniquement la date et la note du dernier examen passé.
J'ai essayé :
select etu_nom, exam_date, exam_note
from etudiant e1, examen ex1
where etu_id=exam_id
and exam_date =
(select max(ex2.exam_date)
from etudiant e2, examen ex2
where e1.etu_id=e2.etu_id)
group by etu_mysql
ca marche pas vraiment : aucun enregistrement retourné (la base est bien rempli (-: j'ai vérifié
Quelqu'un peut me dépanner ?
Merci à tous