2015-02-12 2 views
1

Вот мой запрос:Дата не сортировать должным образом с помощью SQL над разделом

;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' 

Это результат:

<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> 

Почему 10 февраля подходя до 11 февраля? Даже DESC это неправильно, всегда второй, а не первый. Когда я использую CN> 1 февраля 10, остается. Мне нужно самая последняя дата в результате. Какого черта я здесь не хватает?

+3

Похоже, это создание даты, как «строки» и их сортировки в алфавитном порядке. Являются ли даты фактическими типами данных DATE на SQL-сервере? – mrunion

+0

'заказать по ... asc'? Почему он не должен быть первым? Вы сортируете строки, а не даты. –

+1

Вы ничего не делаете со своим номером строки. Вы строите его внутри своего CTE, а затем говорите «где его больше нуля» (это все), но потом вы не выбираете его или не сортируете по нему. – Xedni

ответ

0

Использование Order by в последнем select запроса еще порядка не будет guarenteed

;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) 
2

Вы создаете КТР, который дает вам заказ, но вы не приказывать результаты. Добавить

ORDER BY CN 

к вашему внешнему запросу.

, но в этот момент ваш запрос эквивалентен

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

И да, вы можете преобразовать строки с датами в ORDER BY пункте.

Примечание стороны: CN будет никогда быть 0.

+0

Спасибо D. Мне нужно было CAST LastUpdate до DATE, и он отлично работал. Я собираюсь изменить CN> 1, чтобы вернуть самые старые обновления. Я ценю вашу помощь. –

Смежные вопросы