Sélectionnez uniquement les lignes par des tables de jointure valeur max
Je veux sélectionner uniquement la ligne qui a max b.date de fin de l'u.classno, u.userno. Mais ça ne fonctionne pas.
select u.classno, u.userno, b.enddate
from libUser u
join book b on b.id = u.bookid
group by u.classno, u.userno
having b.enddate=max(b.enddate) //doesn't works
OriginalL'auteur karlkeller | 2013-09-09
Vous devez vous connecter pour publier un commentaire.
Quoi de mal avec:
u.classno
etu.userno
s'ils ne sont pas inclus dans la clause group by la valeur peut ne pas être sur la même ligne queMAX(b.enddate)
est choisi à partir de. Généralement, c'est la première ligne de chaquegroup
qui peut changer en fonction de laorder by
clause. J'ai vérifié cela surMySQL
avant d'écrire ici. MS-SQL ne permet pas une telle requête. Ne pas connaître d'autres SGBDR.OriginalL'auteur Filip
Ici est un excellent article dans l'officiel de la documentation de MySQL, mais seulement la norme SQL est utilisée, de sorte qu'il peut être appliqué quelque soit le SGBD que vous utilisez.
Je suis juste en citant le manuel, et je l'indique dans ma réponse.
Rien de mal avec tout ça, j'étais impressionné par la vitesse.
alors, laquelle est la plus rapide?
Il dépend des données que vous avez, mais la plupart du temps, la sous-requête corrélée est le plus rapide pour moi (dans MySQL, qui est, elle aussi dépend du SGBD que vous utilisez).
OriginalL'auteur fancyPants