《T-SQL性能调优秘笈——基于SQL Server 2012 窗口函数》——1.6 窗口定义的重复使用

本节书摘来自异步社区出版社《T-SQL性能调优秘笈——基于SQL Server 2012 窗口函数》一书中的第1章,第1.6节,作者: 【美】Itzik Ben-Gan,更多章节内容可以访问云栖社区“异步社区”公众号查看。

《T-SQL性能调优秘笈——基于SQL Server 2012 窗口函数》——1.6 窗口定义的重复使用

1.6 窗口定义的重复使用
T-SQL性能调优秘笈——基于SQL Server 2012 窗口函数
假设我们需要在同一个查询中调用多个窗口函数,并且部分窗口描述(或所有描述)适用于多个函数。如果我们在所有函数中都给出完整的窗口描述,代码的长度会急速增加,从下面的示例中可以看到问题:

标准SQL对此有解决方法,它有一个叫做WINDOW的子句,允许我们对窗口描述或部分窗口描述进行命名;然后在定义其他窗口——即将被窗口函数使用或用来定义另一个命名窗口时,指代这个命名的窗口描述。从概念上来说,这个子句在HAVING子句之后,SELECT子句之前判断。

SQL Server还不支持WINDOW子句。但根据标准SQL,可以用WINDOW子句缩写前置查询,如下所示:

《T-SQL性能调优秘笈——基于SQL Server 2012 窗口函数》——1.6 窗口定义的重复使用

加了WINDOW子句后,差异还是很大的。我们可以看到,在这个案例中,WINDOW子句把一个带有分区、排序和框架选项的完整的窗口描述命名为W1。所有4个函数都把它们的窗口描述称为W1。WINDOW子句实际上是相当复杂的。前面提到,窗口描述不必是完整的,它甚至可以是部分的。这样一个窗口的定义可以是命名部分和隐式部分的混合。顺便插一句,标准SQL对WINDOW子句的说明有10页之多!细节解读可不不是一件轻松的事。

如果将来SQL Server加入对WINDOW子句的支持就好了,尤其是现在,SQL Server已对窗口函数的进行了广泛的支持,人们希望终结冗长的窗口描述。

本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。

上一篇:首次揭秘云原生Hologres存储引擎


下一篇:【最佳实践】实时计算Flink在IoT行业的实时数仓建设实践