Hello les gens !
Je fais pas mal de requête SQL en ce moment, et je me suis retrouvé confronter à un problème récurant. En gros ça concerne les requêtes où on voudrait mettre une condition sur une fonction d'agrégation.
J'ai trouvé un exemple similaire pour m'expliquer:
On veut faire une requête qui renvoie pour chaque université, le nom de l'université et le nom du dernier étudiant inscrit.
On a : Table University
bigint id
string name
Table Student
bigint id
bigint UniversityId
date registrationDate
string name
Bon perso je résoudrais le problème comme ça :
SELECT univ.name, stud.name FROM University univ
INNER JOIN Student stud ON stud.universityId = univ.id
INNER JOIN (SELECT univ.id AS univId, MAX(stud.registrationDate) AS maxDate FROM University univ
INNER JOIN Student stud ON stud.universityId = university.id
GROUP BY univ.id) subRequest ON subRequest.univId = univ.id AND subRequest.maxDate = stud.registrationDate
Mais je me demande si il n'y a pas de façon.. plus élégante de faire la requête, vu que avec cette solution on doit faire 2 requêtes à chaque fois, et que c'est pas très fun à décoder.
A noter que la solution doit être compatible avec toutes les SGBD communes (donc pas d'utilisation de fonction spécifique à certaines)
Merci d'avance et @+