12
votes

Sélectionnez les enregistrements Top N commandés par X, mais ont des résultats dans l'ordre inverse.

J'essaie d'obtenir le top n records (lorsqu'il est commandé par une colonne x), mais j'ai le résultat dans l'ordre inverse. La déclaration suivante est incorrecte , mais démontre probablement ce que je suis après: xxx

par exemple, la colonne x pourrait être une pièce d'identité ou un horodatage; Je veux les 10 derniers enregistrements, mais je veux qu'ils sont retournés dans l'ordre chronologique avant.


2 commentaires

Pourquoi pas SELECT TOP 10 * de la commande FOOKABLE par X ASC ?


@Dor Parce que je recevrais les 10 derniers enregistrements, mais ils seraient retournés dans l'ordre chronologique inverse.


4 Réponses :


15
votes
SELECT * FROM 
   (SELECT TOP 10 * FROM FooTable ORDER BY X DESC) as myAlias 
ORDER BY X ASC 
i.e. you might need an alias on your subquery, but other than that it should work.

1 commentaires

Bien merci. Bien que je ne comprends pas vraiment pourquoi SQL exige un alias quand il n'y a pas de référence à celui-ci ailleurs dans la requête.



4
votes

Essayez xxx

ou avec une expression de table commune (CTE) xxx


0 commentaires

1
votes

L'ordre par clause est utilisé pour commander le résultat défini par une colonne spécifiée.

votre requête Sélectionnez Top 10 * à partir de la commande Footed by x Desc En supposant que X est l'horodatage, ne retourne pas les 10 rangées insérées les plus récentes. Il retournera les 10 premières lignes telles que stockées (sous la commande) dans la base de données et renvoiez ensuite l'ensemble des résultats des 10 lignes de ce type, dans l'ordre décroissant. D'où votre sous-requête doit être modifiée à

Sélectionnez le top 10 * à partir de (SELECT * à partir de la commande FOOKABLE par Desc) comme t

Cela devrait remplir votre première exigence. Vous pouvez ensuite utiliser ce résultat défini comme alias, pour décider de votre ordre de tri final.

J'espère que je vous ai bien compris, lorsque vous dites " J'essaie d'obtenir le Top N records (lorsqu'il est commandé par une colonne x) " "


1 commentaires

L'erreur est "La commande par clause n'est pas valide dans des vues, des fonctions en ligne, des tables dérivées, des sous-requêtes et des expressions de table communes, à moins que le haut, le décalage ou le XML soit également spécifié."



1
votes

Une solution alternative à cette question pour toutes les versions non prises pour TOP STRY> Mot-clé est d'utiliser limite forte>. Exemple: -

SELECT * FROM 
   (SELECT * FROM FooTable ORDER BY X DESC LIMIT 10) as myAlias 
ORDER BY X ASC 


0 commentaires