TSQL left join et seulement la dernière ligne de droite
Je suis en train d'écrire une requête sql pour obtenir la poste et seul le dernier commentaire de ce post(si il existe).
Mais je ne peux pas trouver un moyen de limiter à seulement 1 ligne pour colonne de droite à gauche rejoindre.
Voici un exemple de cette requête.
SELECT post.id, post.title,comment.id,comment.message
from post
left outer join comment
on post.id=comment.post_id
Si le post a 3 commentaires-je obtenir 3 lignes avec ce post, mais je veux seulement 1 ligne avec le dernier commentaire(classés par date).
Quelqu'un peut-il m'aider avec cette question?
Vous devez vous connecter pour publier un commentaire.
ou
L'ancien est plus efficace pour les quelques postes avec de nombreux commentaires dans chaque; le dernier est plus efficace pour un grand nombre de postes avec quelques commentaires dans chaque.
apply
option était de 99% de la requête coût 😮Sous-requête:
Vous aurez envie de se joindre à une sous-requête qui retourne le dernier commentaire pour le post. Par exemple:
Couple d'options....
Une façon est de faire la JOINTURE sur:
(remarque je suis en supposant que commentaire.id est un champ d'Identité)
quelle version de SQL Server? Si vous avez la fonction Row_Number() disponible, vous pouvez trier vos commentaires par ce que "première" signifie pour vous, et puis il suffit d'ajouter un "où RN=1" clause. N'ont pas une pratique exemple ou le droit de syntaxe sur le dessus de ma tête mais que vous avez des tonnes de requêtes qui font exactement cela. D'autres postes sont tous dans le 1,000 ' s de manières que vous pourriez faire.
Je dirais profil et voir celui qui fonctionne le mieux pour vous.
Vous n'avez pas dit le nom de votre champ de date, j'ai donc rempli avec
[DateCreated]
. C'est essentiellement le même que AGoodDisplayName du post ci-dessus, mais en utilisant le champ de la date au lieu de compter sur la colonne ID de la commande.