锋利的SQL2014:基于窗口的偏移计算

FIRST_VALUE和LAST_VALUE函数分别允许从窗口框架的第一行和最后一行返回一个元素。因此,这些函数支持窗口分区、排序和框架子句。

如果希望元素来自窗口分区的第一行,应使用带有窗口框架范围“ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW”的FIRST_VALUE。由于该框架是默认的,故而也可以省略。

如果希望元素来自窗口分区的最后一行,应使用带有窗口框架范围“ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING”的LAST_VALUE。需要注意的是,该框架不能省略,因为在未指定该框架的情况下会使用默认框架“ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW”,这样会导致最后一行就是当前行,,即CURRENT ROW,所以即使使用了LAST_VALUE函数,也不会得到窗口的最后一行。

下面通过一个示例来说明这两个函数的使用方法。下面的查询使用FIRST_VALUE函数返回雇员当年第一个季度的销售额,使用LAST_VALUE函数返回当年最后一个季度的销售额。查询结果如表9-20所示。

SELECT EmpID, SalesYear, SalesQuarter,

FIRST_VALUE(SubTotal) OVER(PARTITION BY EmpID, SalesYear

ORDER BY EmpID,SalesYear, SalesQuarter

ROWS BETWEEN UNBOUNDEDPRECEDING

AND CURRENT ROW) AS FirstVal,

SubTotalAS CurVal,

LAST_VALUE(SubTotal) OVER(PARTITION BY EmpID, SalesYear

ORDER BY EmpID,SalesYear, SalesQuarter

ROWS BETWEEN CURRENT ROW

AND UNBOUNDED FOLLOWING) AS LastVal

FROM dbo.Orders

ORDER BY EmpID, SalesYear, SalesQuarter;

其实你已经错过了旅行的意义。

锋利的SQL2014:基于窗口的偏移计算

相关文章:

你感兴趣的文章:

标签云: