2017-10-10 88 views
4

有誰知道SQL標準定義和PostgreSQL將實現(10.x或更高)參數窗口大小PostgreSQL參數窗口大小

婁我所說的參數窗口大小MVE:

WITH 

D AS (SELECT T.x::FLOAT FROM generate_series(0., 10., 0.1) AS T(x)), 
W AS (SELECT 10 AS WindowSize) 

SELECT 
    D.x 
    ,AVG(D.x) OVER (ROWS BETWEEN W.WindowSize PRECEDING AND CURRENT ROW) 
FROM 
    D, W; 

這就提出了以下錯誤:

ERROR: argument of ROWS must not contain variables 
LINE 8: ,AVG(D.x) OVER (ROWS BETWEEN W.WindowSize PRECEDING AND C... 
             ^
********** Error ********** 

ERROR: argument of ROWS must not contain variables 
SQL State: 42P10 

我明白參數窗口是一種複雜的實現。 而且我知道我可以使用動態查詢和PL/PGSQL來繞過此限制的某些方面。

我的問題是:

  • 待辦事項SQL標準定義了這樣的事情?
  • PostgreSQL會執行它(如果是這樣,它是什麼時候計劃的)?
  • 如果沒有,在使用此功能之前要克服哪些限制?
+0

它不可能很難實現 - 至少對於'ROWS'來說。以其他方式獲得功能相當容易,但這不是你的問題。 –

回答

2

不,這不是標準的SQL。

可以在BNF檢查:

http://jakewheat.github.io/sql-overview/sql-2008-foundation-grammar.html#window-frame-preceding

<window frame preceding> ::= 
    <unsigned value specification> PRECEDING 

<unsigned value specification>不允許表達式。允許綁定參數,順便說一句。

+0

感謝您分享此鏈接,這是官方參考嗎?它是否覆蓋了完整的SQL定義? – jlandercy

+0

不,這不是官方的。但我已經檢查了2016年的回覆 - 沒有明顯的區別。相關的BNF聲稱涵蓋了ISO標準的第2部分。在這裏看到不同的部分是什麼:http://modern-sql.com/standard/parts –