代码之家  ›  专栏  ›  技术社区  ›  jlandercy

PostgreSQL参数化窗口大小

  •  4
  • jlandercy  · 技术社区  · 8 年前

    有谁知道SQL标准是否定义并将实现PostgreSQL(10.x或更高版本)吗 参数化窗口大小 ?

    以下是我所说的参数化窗口大小的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绕过这个限制的某些方面。

    我的问题是:

    • PostgreSQL是否会实施它(如果是,计划何时实施)?
    • 如果没有,在拥有这样的功能之前需要克服哪些限制?
    1 回复  |  直到 8 年前
        1
  •  2
  •   Markus Winand    8 年前

    不,这不是标准的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> 不允许表达式。顺便说一句,允许使用绑定参数。

    推荐文章