Я вставил очень упрощенную версию своего SQL-запроса ниже. Проблема, с которой я сталкиваюсь, заключается в том, что оператор ORDER BY
влияет на результаты выбора моего CTE. Я не мог понять, почему это так, я изначально думал, что в CTE я выполняю некоторый оператор SELECT
, затем ORDER BY
должен работать с ЭТИМИ результатами.
К сожалению, поведение, которое я (Индексируется в обратном порядке по идентификатору)
ID, Date
9600 2010-10-12
9599 2010-09-08
9598 2010-08-31
9597 2010-08-31
9596 2010-08-30
9595 2010-08-11
9594 2010-08-06
9593 2010-08-05
9592 2010-08-02
....
9573 2010-08-10
....
8174 2010-08-05
....
38 2029-12-20
Мой основной запрос:
;with results as(
select TOP 10 ID, Date
from dbo.items
)
SELECT ID
FROM results
запрос возвращает:
ID, Date
9600 2010-10-12
9599 2010-09-08
9598 2010-08-31
9597 2010-08-31
9596 2010-08-30
9595 2010-08-11
9594 2010-08-06
9593 2010-08-05
9592 2010-08-02
Мой запрос с запросом ORDER BY
;with results as(
select TOP 10 ID, Date
from dbo.items
)
SELECT ID
FROM results
ORDER BY Date DESC
возвращает:
ID, Date
38 2029-12-20
9600 2010-10-12
9599 2010-09-08
9598 2010-08-31
9597 2010-08-31
9596 2010-08-30
9595 2010-08-11
9573 2010-08-10
9594 2010-08-06
8174 2010-08-05
Кто-нибудь может объяснить, почему первый запрос будет возвращают только идентификаторы, которые находятся в первых 10 таблицах, а второй запрос возвращает первые 10 из всей таблицы (после применения сортировки).