Participer seulement le “dernier” enregistrement avec t-sql
J'en ai deux tables. Tableau "B" a un "un à plusieurs" de la relation avec le Tableau "A", ce qui signifie qu'il y aura de nombreux enregistrements dans la table "B" pour un enregistrement dans la table "Un".
Les enregistrements de la table "B" sont principalement différenciées par une date, j'ai besoin de produire un jeu de résultats qui comprend l'enregistrement dans le tableau "A" rejoint avec seulement le dernière enregistrement dans la table "B". À des fins d'illustration, voici un exemple de schéma:
Table A
-------
ID
Table B
-------
ID
TableAID
RowDate
Je vais avoir de la difficulté à la formulation de la requête de me donner le resultset je suis à la recherche de toute aide serait grandement appréciée.
La colonne de jointure [Table] [Table B] est TableAID?
Devrait avoir compris cela ... vous pouvez supposer qu'il ne sera pas en double datetimes, donc il y aura toujours un "plus tard" 🙂
OriginalL'auteur Joel Martinez | 2010-12-16
Vous devez vous connecter pour publier un commentaire.
Si vous avez besoin de plus de colonnes de la TableB, ce faire:
Ce n'est pas tout à fait répondre à la question bien qu'il ne reçoit max ligne date à partir de la table b. La question s'est posée pour la ligne la plus récente - reste du tableau b doit être retourné pour la ligne et doit aussi prendre en compte le Tableau B ayant deux entrées de la même date/heure pour un TableA de référence
Je suppose TableB seulement a des champs spécifiés par l'OP. Avez modifié la requête pour gérer le cas que vous mentionnez. Les doublons peuvent ou peuvent ne pas être un problème pour les données de l'utilisateur.
+1 pour le "ne pas utiliser * commentaire"
éviter * résout les problèmes de: double colonnes, des hypothèses sur la colonne retournée ordre, les performances de la sélection de plus de données que vous avez besoin, la liste est longue.
OriginalL'auteur RedFilter
Qui s'applique extérieure est très rapide par rapport à d'autres approches que j'ai essayé sur mon système.
Je viens de tester la accepté de répondre vs cette réponse et j'ai trouvé que l'extérieur s'appliquent a ~2 fois plus lent que l'on a accepté la réponse!
Vous avez exécuté plus d'une fois au cours de l'essai, non? Sinon, les données peuvent être mises en cache.
Je ne me souviens pas. J'ai l'habitude de les exécuter au moins 5 fois chacun. J'ai aussi tendance à redémarrer mon dev serveurs avant de tester quelque chose de nouveau à voir comment il effectue, mais... je ne m'en souviens pas.
OriginalL'auteur Philip Fourie
OriginalL'auteur Joel Coehoorn
tableau B jointure est facultatif: cela dépend si il y a d'autres colonnes que vous voulez
OriginalL'auteur gbn
Juste pour une question de clarté et de profiter à ceux qui tombent sur cette question très ancienne. La accepté de répondre serait de retour des lignes en double si il y a doublon
RowDate
dansTable B
. Plus sûr et plus efficace serait d'utiliserROW_NUMBER()
:OriginalL'auteur Y.B.
Essayez d'utiliser ceci:
OriginalL'auteur Paulo Marques