Date ne pas sortinger correctement en utilisant SQL sur la partition

Voici ma requête:

;WITH CTE AS ( SELECT ComputerName , LastUpdate , ROW_NUMBER() OVER(PARTITION BY ComputerName ORDER BY LastUpdate ASC) CN FROM My_Table ) SELECT * FROM CTE WHERE CN > 0 and ComputerName = '4408Q12' 

C'est le résultat:

 <pre> ComputerName LastUpdate 4408Q12 Feb 10 2015 3:45PM 4408Q12 Feb 11 2015 6:10PM 4408Q12 Jan 27 2015 2:09PM 4408Q12 Jan 28 2015 1:10PM </pre> 

Pourquoi le 10 février arrive avant le 11 février? Même DESC le fait mal, toujours en second lieu, pas en premier. Quand j'utilise CN> 1 février 10 est à gauche. J'ai besoin de la date la plus récente en conséquence. Que diable suis-je manquant ici?

Vous créez un CTE qui vous donne la command, mais vous ne commandz pas les résultats . Ajouter

 ORDER BY CN 

à votre requête externe.

mais à ce moment votre requête est équivalente à

 SELECT ComputerName , LastUpdate FROM My_Table WHERE ComputerName = '4408Q12' ORDER BY LastUpdate ASC 

Et oui, vous pouvez convertir les strings en dates dans la clause ORDER BY.

Note secondaire: Le CN ne sera jamais nul.

Use Order by dans la dernière requête select , l'ordre else ne sera pas garanti

  ;WITH CTE AS ( SELECT ComputerName , LastUpdate , ROW_NUMBER() OVER(PARTITION BY ComputerName ORDER BY cast(LastUpdate as date) ASC) CN FROM My_Table ) SELECT * FROM CTE WHERE CN > 0 and ComputerName = '4408Q12' ORDER BY cast(LastUpdate as date)