PostgreSQL 参数 Window 大小
PostgreSQL Parametric Window Size
有谁知道 SQL 标准是否定义和 PostgreSQL 将实施(10.x 或更高)参数化 Window 大小 ?
下面是我称之为参数 window 大小的 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
我知道参数 window 实现起来有点复杂。
而且我知道我可以使用动态查询和 PL/PGSQL 绕过此限制的某些方面。
我的问题是:
- SQL标准是否定义了这样的东西?
- PostgreSQL 会实施它吗(如果会,计划什么时候实施)?
- 如果没有,在拥有这样的功能之前需要克服哪些限制?
不,这不标准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>
不允许表达式。允许绑定参数,顺便说一句。
有谁知道 SQL 标准是否定义和 PostgreSQL 将实施(10.x 或更高)参数化 Window 大小 ?
下面是我称之为参数 window 大小的 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
我知道参数 window 实现起来有点复杂。 而且我知道我可以使用动态查询和 PL/PGSQL 绕过此限制的某些方面。
我的问题是:
- SQL标准是否定义了这样的东西?
- PostgreSQL 会实施它吗(如果会,计划什么时候实施)?
- 如果没有,在拥有这样的功能之前需要克服哪些限制?
不,这不标准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>
不允许表达式。允许绑定参数,顺便说一句。