SQL Server订购Top

时间:2014-09-24 14:52:05

标签: sql sql-server

myTable中是一个日期和一个卷,我想计算最晚5个交易日的平均交易量 - 不仅是最高日期 - 而是任何给定的@myDate。 这很好用:

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,然后选择Top (5),那么它将始终正常工作,在这种情况下我可以依赖结果
  • 但是如果SQL Sever首先选择Top (5)然后那么order by date desc那么我就不能依赖结果 - 我的测试用例可能会偶然发挥作用。

SQL Server是否始终首先计算order by,然后计算Top(5)

我能依靠吗?

1 个答案:

答案 0 :(得分:2)

是。如果使用order by显式对查询进行排序,则将对结果集进行排序,然后返回前5个记录(在此示例中)。

如果没有对查询进行显式排序,则无法保证排序顺序。