2017-10-10 8 views
4

SQL標準が定義し、PostgreSQLが実装されているかどうかは誰にも分かりません(10.x以降)パラメトリックウィンドウサイズPostgreSQLパラメトリックウィンドウサイズ

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; 

次のエラーが発生します:私はパラメトリックウィンドウサイズと呼ぶもののMVEベロー

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>は表現することはできません。 Bindパラメータは許されます。

+0

リンクを共有していただきありがとうございます。完全なSQL定義をカバーしていますか? – jlandercy

+0

いいえ、これは公式ではありません。しかし、私は2016 relaseをチェックしました - 明らかな違いはありません。リンクされたBNFは、ISO規格の第2部をカバーすると主張している。さまざまな部分がどのようなものであるかをここで見てください:http://modern-sql.com/standard/parts –