SQL Server: Seule la dernière entrée dans le GROUPE PAR
J'ai le tableau suivant en MSSQL2005
id | business_key | result
1 | 1 | 0
2 | 1 | 1
3 | 2 | 1
4 | 3 | 1
5 | 4 | 1
6 | 4 | 0
Et maintenant je veux le groupe sur la base des business_key retour de la saisie complète avec les id les plus élevés.
Donc mon résultat attendu est:
business_key | result
1 | 1
2 | 1
3 | 1
4 | 0
Je parie qu'il y a un moyen de le réaliser, j'ai juste ne peux pas le voir à l'instant.
OriginalL'auteur computhomas | 2009-01-13
Vous devez vous connecter pour publier un commentaire.
Une solution alternative, qui peut vous donner une meilleure performance (test à la fois des moyens et de vérifier les plans d'exécution):
Cette question suppose que l'ID est une valeur unique (au moins pour tout business_key) et que la valeur est NON NULLE.
C'est ce que je cherchais ici : stackoverflow.com/questions/20934092/...
OriginalL'auteur Tom H
OriginalL'auteur Chris Simpson
Essayer cette
EDIT: j'ai créé la table pour tester mon code. Je l'inclus ci-dessous dans le cas où quelqu'un d'autre veut le tester.
Jonathan-Vous avez raison, il y avait une faute de frappe dans la clause where. Il devrait être 'dans le' non '='. Mais les alias ne sont pas nécessaires. Merci d'avoir signalé mon erreur.
OriginalL'auteur John MacIntyre
Ce n'est guère le cas. J'ai couru les deux requêtes à travers MSSQL 2012 R2 en une seule fois, et ce que j'ai trouvé dans le plan d'exécution a été que la sous-requête de la partie 68% du temps écoulé. La très partition utilisée 77% de l'ensemble de la deuxième requête.
OriginalL'auteur
C'est un vieux post, mais était pertinent pour quelque chose que j'était en train de faire actuellement (2013). Si vous obtenez un plus grand ensemble de données (typique dans la plupart des DBs), les résultats des différentes requêtes (en regardant les plans d'exécution) en dit beaucoup. Nous avons d'abord créer un "tableau de POINTAGE" pour générer aléatoirement des numéros, puis utiliser une formule arbitraire pour créer des données pour le "Matable":
Ensuite, nous avons trois différents types de requêtes à l'examen du rendement (activer le "Plan d'Exécution" si vous utilisez SQL Server Management Studio):
De nettoyage:
Vous trouverez, en regardant les plans d'exécution, Essayez de 1" a le meilleur de la Requête "Coût" et plus bas le temps CPU mais "Essayez 3" a le moins de lectures et de temps PROCESSEUR n'est pas trop mauvais. Je vous conseille d'utiliser un CTE méthode pour le moins lit
OriginalL'auteur DBNewbie_2007