sql - PostgreSQL 参数窗口大小

标签 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

我知道参数窗口实现起来有点复杂。 而且我知道我可以使用动态查询和 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>不允许表达式。顺便说一下,允许绑定(bind)参数。

关于sql - PostgreSQL 参数窗口大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46665492/

相关文章:

Javascript 作为函数式语言

MySql 从分组表中选择

mysql - 运行Sql触发器出错

node.js - docker env 变量显示未定义

适用于 Windows 的 PostgreSQL 备份软件

oop - 接口(interface)是否与多重继承冗余?

mysql - 从 sql 数据库中选择最后一个条目

java - 如何从 SQL 数据库中仅获取 1 个元素?

sql - 从列类型开始,如何找到Postgres中支持的聚合?

c# - "using"构造和异常处理