Sélection d'un Enregistrement Avec la Valeur MAX.
Dans SQL Server 2008 j'ai une table CLIENTS qui a deux colonnes:
ID,
SOLDE
Comment puis-je écrire la requête qui sélectionne l'ID du client qui ont le maximum d'équilibre, "dans la manière la plus efficace"?
Option 1: ORDER BY BALANCE and SELECT TOP(1)
--> les coûts trop.
Option 2: tout d'Abord Get MAX amount
, puis faire un autre requête qui utilise le montant en where clause
--> les coûts trop et semble pas fiable.
- Si vous ajoutez un non clustered index à l'Équilibre, vous devriez trouver que l'Option 1 est beaucoup plus rapide.
- Voulez-vous connaître tous les Id dans le cas d'une cravate? Il semble que vous êtes à la recherche pour un de manière aléatoire dans le cas d'égalité tel qu'il est.
Vous devez vous connecter pour publier un commentaire.
Note: Une mauvaise révision de cette réponse a été édité sur. Veuillez passer en revue toutes les réponses.
Une sous-sélection dans le
WHERE
clause de récupérer le plus grandBALANCE
agrégées sur l'ensemble des lignes. Si plusieursID
valeurs de partager cette valeur d'équilibre, tout serait retourné.HAVING
ouWHERE
.Qu'entendez-vous coûte trop cher? Trop de quoi?
SELECT MAX(Balance) AS MaxBalance, CustomerID FROM CUSTOMERS GROUP BY CustomerID
Si votre table est correctement indexé (Équilibre) et il y a obtenu d'être un indice sur le PK que je ne suis pas sûr de ce que tu veux dire à propos des coûts trop ou semble peu fiable? Il n'y a rien de fiable sur un total que vous utilisez et qui lui dit de faire. Dans ce cas,
MAX()
fait exactement ce que vous lui dites de faire - il n'y a rien de magique.Prendre un coup d'oeil à
MAX()
et si vous voulez filtrer utiliser leHAVING
clause.Voici une option si vous disposez de plusieurs enregistrements pour chaque Client et sont à la recherche pour les dernières équilibre pour chaque (disent qu'ils sont des dossiers datés):
Dire, pour un utilisateur, il y a de révision pour chaque date. Le suivant va ramasser record pour le max de révision de chaque jour pour chaque employé.
La requête répondu par jonathan giri était la bonne réponse, voici un exemple similaire de tirer le maximum d'id (PresupuestoEtapaActividadHistoricoid), après avoir calculer la valeur maximale(de Base)