J'ai une table de données (la base de données est MSSQL):
ID OrderNO PartCode Quantity DateEntered
417 2144 44917 100 18-08-11
418 7235 11762 5 18-08-11
419 9999 60657 100 18-08-11
420 9999 60657 90 19-08-11
Je voudrais faire une requête qui renvoie OrderNO, PartCode et Quantity, mais uniquement pour la dernière commande enregistrée.
À partir du tableau d'exemple, je voudrais récupérer les informations suivantes:
OrderNO PartCode Quantity
2144 44917 100
7235 11762 5
9999 60657 90
Notez qu'une seule ligne a été renvoyée pour la commande 9999.
Merci!
sql-server
GEMI
la source
la source
MAX(DATE)
retourne pas une ligne pour la commande 9999?Réponses:
Si
rownumber() over(...)
est disponible pour vous ....la source
Le meilleur moyen est Mikael Eriksson, s'il
ROW_NUMBER()
est à votre disposition.Le mieux est de se joindre à une requête, selon la réponse de Cularis.
Alternativement, le moyen le plus simple et direct est une sous-requête corrélée dans la clause WHERE.
Ou...
la source
C'est la plus rapide de toutes les requêtes fournies ci-dessus. Le coût de la requête est de 0,0070668.
La réponse préférée ci-dessus, par Mikael Eriksson, a un coût de requête de 0,0146625
Vous ne vous souciez peut-être pas des performances d'un si petit échantillon, mais dans les requêtes volumineuses, tout s'additionne.
la source
La requête interne sélectionne tous
OrderNo
avec leur date maximale. Pour obtenir les autres colonnes de la table, vous pouvez les joindre surOrderNo
et leMaxDate
.la source
Pour MySql, vous pouvez faire quelque chose comme ceci:
la source
{ }
) dans la barre d'outils de l'éditeur pour bien le formater et la mettre en évidence!Et vous pouvez également utiliser cette instruction select comme requête de jointure gauche ... Exemple:
J'espère que cela aidera quelqu'un qui cherche cela :)
la source
rownumber () over (...) fonctionne mais je n'ai pas aimé cette solution pour 2 raisons. - Cette fonction n'est pas disponible lorsque vous utilisez une ancienne version de SQL comme SQL2000 - Dépendance à la fonction et n'est pas vraiment lisible.
Une autre solution est:
la source
Si vous avez indexé ID et OrderNo, vous pouvez utiliser IN: (Je déteste le trading de la simplicité pour l'obscurité, juste pour économiser quelques cycles):
la source
Essayez d'éviter d'utiliser JOIN
la source
Cela a parfaitement fonctionné pour moi.
la source
Cela fonctionne pour moi. utilisez MAX (CONVERT (date, ReportDate)) pour vous assurer que vous avez une valeur de date
la source