在myTable
中是一个日期和一个卷,我想计算最晚5个交易日的平均交易量 - 不仅是最高日期 - 而是任何给定的@myDate
。
这很好用:
select AVG(volume)
from
(select Top (5)
volume, date
from
myTable
where
data <= @myDate
order by
date desc) t
我多次检查过,我使用的子选择总是会在给定的@myDate
之前显示最新的5条记录。
但我不是很自信,也许因为我的索引而意外地工作。
这是我的问题:
order by date desc
,然后选择Top (5)
,那么它将始终正常工作,在这种情况下我可以依赖结果Top (5)
然后那么order by date desc
那么我就不能依赖结果 - 我的测试用例可能会偶然发挥作用。 SQL Server是否始终首先计算order by
,然后计算Top(5)
?
我能依靠吗?
答案 0 :(得分:2)
是。如果使用order by
显式对查询进行排序,则将对结果集进行排序,然后返回前5个记录(在此示例中)。
如果没有对查询进行显式排序,则无法保证排序顺序。