本節書摘來自異步社群出版社《t-sql性能調優秘笈——基于sql server 2012 視窗函數》一書中的第1章,第1.6節,作者: 【美】itzik ben-gan,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

1.6 視窗定義的重複使用
t-sql性能調優秘笈——基于sql server 2012 視窗函數
假設我們需要在同一個查詢中調用多個視窗函數,并且部分視窗描述(或所有描述)适用于多個函數。如果我們在所有函數中都給出完整的視窗描述,代碼的長度會急速增加,從下面的示例中可以看到問題:
标準sql對此有解決方法,它有一個叫做window的子句,允許我們對視窗描述或部分視窗描述進行命名;然後在定義其他視窗——即将被視窗函數使用或用來定義另一個命名視窗時,指代這個命名的視窗描述。從概念上來說,這個子句在having子句之後,select子句之前判斷。
sql server還不支援window子句。但根據标準sql,可以用window子句縮寫前置查詢,如下所示:
加了window子句後,差異還是很大的。我們可以看到,在這個案例中,window子句把一個帶有分區、排序和架構選項的完整的視窗描述命名為w1。所有4個函數都把它們的視窗描述稱為w1。window子句實際上是相當複雜的。前面提到,視窗描述不必是完整的,它甚至可以是部分的。這樣一個視窗的定義可以是命名部分和隐式部分的混合。順便插一句,标準sql對window子句的說明有10頁之多!細節解讀可不不是一件輕松的事。
如果将來sql server加入對window子句的支援就好了,尤其是現在,sql server已對視窗函數的進行了廣泛的支援,人們希望終結冗長的視窗描述。
本文僅用于學習和交流目的,不代表異步社群觀點。非商業轉載請注明作譯者、出處,并保留本文的原始連結。