2017-10-10 3 views
4

Est-ce que quelqu'un sait si les normes SQL définissent et PostgreSQL implémentera (10.x ou plus) Parametric Window Size?Taille de fenêtre paramétrique PostgreSQL

Bellow un MVE de ce que j'appelle une taille de fenêtre paramétrique:

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; 

Ce qui soulève l'erreur suivante:

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 

Je comprends la fenêtre paramétrique est un peu complexe à mettre en œuvre. Et je sais que je peux contourner certains aspects de cette limitation en utilisant Dynamic Query et PL/PGSQL.

Mes questions sont les suivantes:

  • Des normes SQL définissent une telle chose? Est-ce que PostgreSQL l'implémentera (si oui, quand est-il prévu)?
  • Si non, quelles sont les limitations à surmonter avant d'avoir une telle fonctionnalité?
+0

Cela ne peut pas être si difficile à implémenter - au moins pour "ROWS". Il est assez facile d'obtenir la fonctionnalité par d'autres moyens, mais ce n'est pas votre question. –

Répondre

2

Non, ce n'est pas standard SQL.

Vous pouvez vérifier dans la 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> ne permet pas l'expression. Les paramètres de liaison sont autorisés, btw.

+0

Merci de partager le lien, est-ce une référence officielle? Cela couvre-t-il la définition SQL complète? – jlandercy

+0

Non, ce n'est pas officiel. Mais j'ai vérifié le relas 2016 - pas de différence évidente. La BNF liée prétend couvrir la partie 2 de la norme ISO. Voyez ici quelles sont les différentes parties: http://modern-sql.com/standard/parts –