В myTable
есть дата и том, и я хочу рассчитать средний объем последних 5 дней трейдинга - не только для наивысшей даты - но для любых заданных @myDate
. это работает отлично:SQL Server, заказывающий Top
select AVG(volume)
from
(select Top (5)
volume, date
from
myTable
where
data <= @myDate
order by
date desc) t
Я проверил это несколько раз и подвыборка я всегда выводит последние 5 записей перед данной @myDate
.
НО Я НЕ ТАКОЙ КОНФИДЕНЦИАЛ, возможно, это работает случайно из-за моих указателей.
Вот мой вопрос:
- если SQL Server первым делает
order by date desc
и ТОГДА выбираетTop (5)
тогда он всегда будет работать нормально, в этом случае я мог бы опереться на результаты - Но если SQL Sever сначала выбирает
Top (5)
, а THEN делаетorder by date desc
, тогда я не мог положиться на результат - мои тестовые ящики могли бы работать хорошо случайно.
SQL Server всегда сначала вычисляет order by
и THEN рассчитывает Top(5)
?
Могу ли я полагаться на это?
[TOP] (http://msdn.microsoft.com/en-gb/library/ms189463.aspx): «Когда« TOP »используется в сочетании с предложением« ORDER BY », результирующий набор ограничен к первому N числу ** упорядоченных ** строк "(мой акцент) –
Он всегда делает заказ ТОГДА топ 5 –
большое спасибо Дэмиен и Джеффри, это важно знать! Я не могу поверить в то, что меня обманывают здесь - просят самого достойного, хотя оценка была отрицательно оценена. –