2008-09-13 8 views
10

J'ai une requête où je souhaite récupérer les enregistrements X les plus anciens. À l'heure actuelle ma requête est quelque chose comme ce qui suit:SQL Select Bottom Records

SELECT Id, Title, Comments, CreatedDate 
FROM MyTable 
WHERE CreatedDate > @OlderThanDate 
ORDER BY CreatedDate DESC 

Je sais que normalement je supprimerais mot clé le « DESC » pour changer l'ordre des enregistrements, mais dans ce cas, je veux encore obtenir des enregistrements commandés avec le le plus récent article en premier. Donc, je veux savoir s'il y a un moyen d'effectuer cette requête de sorte que les éléments X les plus anciens soient triés de sorte que l'élément le plus récent soit le premier. Je devrais également ajouter que ma base de données existe sur SQL Server 2005.

Répondre

22

Pourquoi ne pas simplement utiliser une sous-requête?

SELECT T1.* 
FROM 
(SELECT TOP X Id, Title, Comments, CreatedDate 
FROM MyTable 
WHERE CreatedDate > @OlderThanDate 
ORDER BY CreatedDate) T1 
ORDER BY CreatedDate DESC 
+0

Alors commence un voyage épique ... – Jaydles

1

Intégrer la requête. Vous prenez le top x lorsqu'il est trié dans l'ordre croissant (c'est-à-dire le plus ancien), puis re-trier ceux-ci dans l'ordre décroissant ...

select * 
from 
(
    SELECT top X Id, Title, Comments, CreatedDate 
    FROM MyTable 
    WHERE CreatedDate > @OlderThanDate 
    ORDER BY CreatedDate 
) a 
order by createddate desc