PostgreSQL参数窗口大小

时间:2017-10-10 11:22:17

标签: sql postgresql language-features

有没有人知道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

我理解参数窗口实现起来很复杂。 我知道我可以使用Dynamic Query和PL / PGSQL绕过这个限制的某些方面。

我的问题是:

  • SQL标准是否定义了这样的东西?
  • PostgreSQL会实现它吗(如果是,它何时计划好?)
  • 如果没有,在拥有这样的功能之前需要克服哪些限制?

1 个答案:

答案 0 :(得分: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>不允许使用表达式。允许绑定参数,顺便说一句。