概念:

      窗口函数是一种函数:它们的作用域是由OVER字句定义的数据行集合。窗口函数主要用于分析目的,可以用它们进行汇总计算、移动平均值计算、找出数据之间的差距与发现数据岛,以及进行许多其它计算。

描述:

     窗口函数作用于一个数据行集合。窗口是标准SQL术语,用来描述SQL语句内用OVER子句划定的内容,这个内容就是窗口函数的作用域。以下面的查询为例:

1 USE TSQL2012;
2 SELECT orderid,orderdate,val,
3        RANK() OVER(ORDER BY val DESC) AS rnk
4 FROM Sales.OrderValues
5 ORDER BY rnk

      在OVER子句中,定义了窗口所覆盖的与当前行相关的数据行集、行的排序及其它相关元素。如果没有对窗口内的数据进行限定,则窗口内的数据行集就是查询的最终结果。注意的是,从概念上来说,OVER子句定义了跟当前行相关的窗口,并贯穿查询结果集的所有记录。换句话说,对于每一行,OVER子句都定义了一个针对于它的独立窗口。

      标准SQL支持几种窗口函数类:集合、排序、分布、偏移。

      聚合函数:SUM、COUNT、MIN等。一个聚合函数的作用域是一个记录集,这个记录集由一个分组查询或一个窗口描述来定义。

      排名函数:RANK、DENSE_RANK、ROW_NUMBER、NTILE。SQL 2015引入这四个排名函数,并提供了全面的支持。

      分布函数:PERCENT_RANK、CUME_DIST、PERCENTILE_CONT、PERCENTILE_DISC。这四个函数从SQL 2012开始引入。

      偏移函数:LAG、LEAD、FIRST_VALUE、LAST_VALUE和NTH_VALUE。SQL 2012开始支持前四个函数,但未支持NTH_VALUE函数。