2014-09-24 114 views
-1

myTable是日期和量,我想計算最新5個交易日的平均交易量 - 不僅是最高日期 - 而且是任何給定的@myDate。 這工作得很好:SQL Server訂購頂部

select AVG(volume) 
from 
    (select Top (5) 
     volume, date 
    from 
     myTable 
    where 
     data <= @myDate 
    order by 
     date desc) t 

我檢查了幾次,我用子選擇總是帶來了給@myDate之前最新的5個記錄。

但我不那麼有信心,也許它意外地工作,因爲我的索引。

這裏是我的問題:

  • 如果SQL Server首先做的order by date desc,然後挑選​​那麼它會一直工作得很好,在這種情況下,我可以依靠的結果
  • 但如果SQL Sever的首先選擇​​,然後選擇order by date desc,然後我不能依賴結果 - 我的測試用例可能會意外運行良好。

SQL Server總是首先計算order by然後計算Top(5)

我可以依靠這個嗎?

+4

[TOP](http://msdn.microsoft.com/en-gb/library/ms189463.aspx):「當'TOP'和'ORDER BY'子句一起使用時,結果集是有限的到第**個排序的**行的第N個數字「(我強調) – 2014-09-24 14:54:04

+0

它總是按順序排列前5 5 – 2014-09-24 14:55:33

+0

非常感謝達米安和傑弗裏這是重要的知道! 我不能相信它我在這裏被愚弄 - 要求一個最值得考慮的是負面評價。 – 2014-09-24 15:03:28

回答

2

是的。如果用order by對查詢進行顯式排序,結果集將被排序,然後返回前5個記錄(在本例中)。

如果您沒有明確排序查詢,那麼排序順序不會得到保證。