La clause Order by change mon set de résultats

Je sais pourquoi ça se passe mais je veux find un moyen de contourner cela si possible.

Par exemple, j'ai 4 lignes dans ma database et chacune a un datetime (qui sont tous différents). Ce que je veux faire, c'est get les 2 dernières lignes mais utiliser l'ordre croissant, de sorte que le plus ancien soit en haut du jeu de résultats.

J'utilise actuellement

SELECT TOP 2 * FROM mytable WHERE someid = @something ORDER BY added DESC 

Cela me donne les lignes correctes mais dans le mauvais ordre. Si je change le DESC en ASC, il obtient le bon ordre, mais les deux plus anciennes des quatre lignes. Tout cela a du sens pour moi, mais y a-t-il un moyen de contourner le problème?

EDIT: Résolu avec la réponse d'Elliot ci-dessous. La syntaxe ne fonctionnerait pas sans définir un alias pour la table dérivée. Voici le résultat

 SELECT * FROM (SELECT TOP 2 * FROM mytable WHERE someid = @something ORDER BY added DESC) AS tbl ORDER BY tbl.added ASC 

Je pense qu'une solution brutale serait:

 SELECT * FROM (SELECT TOP 2 * FROM mytable WHERE someid = @something ORDER BY added DESC) ORDER BY added 

Cela permettra "top 2 par quelque chose" avec un PARTITION BY ajouté à la clause OVER

 SELECT * FROM ( SELECT *, ROW_NUMBER() OVER (ORDER BY added DESC) as rn FROM mytable WHERE someid = @something ) foo WHERE rn <= 2 ORDER BY added 

Notez que la table dérivée nécessite un alias