Question sur une requête [SQL] - SQL/NoSQL - Programmation
Marsh Posté le 07-07-2016 à 15:05:40
Utiliser FIRST() / LAST() !?
Code :
|
NB : je n'ai pas de serveur sous le coude, pas moyen de tester, donc je ne sais pas du tout ce que je raconte
Marsh Posté le 07-07-2016 à 12:56:21
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 @+