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)