Cadre de window
L’ensemble des lignes d’une section sur lesquelles la fonction Window opère est appelé le cadre de Window (window frames). Le cadre de Window détermine quelles lignes doivent être prises en compte pour la ligne courante lors de l’évaluation d’une fonction Window.
Un cadre de Window se compose de trois parties : une unité (unit), une limite de début et une limite de fin. Les mots-clés RANGE
ou ROWS
peuvent être utilisés comme unité et ceux-ci définissent comment les limites de la Window vont fonctionner. Les limites de la Window sont définies par les expressions suivantes
-
<expr> PRECEDING
-
<expr> FOLLOWING
-
CURRENT ROW
Les clauses ROWS
et RANGE
nécessitent que la clause ORDER BY
soit spécifiée.Si la clause ORDER BY
n’est pas présente, alors pour les fonctions d’agrégation, le cadre de la Window est constitué de toutes les lignes de la partition.Si la clause ORDER BY
est spécifiée, le cadre de la Window se compose par défaut de toutes les lignes depuis le début de la partition jusqu’à la ligne actuelle, plus toutes les lignes suivantes qui sont égales à la ligne actuelle selon la clause ORDER BY
,c’est-à-dire `Etendue entre la rangée précédente non bornée et la rangée actuelle'.
La clause ROWS
limite les lignes dans une section en spécifiant un nombre fixe de lignes précédant ou suivant la ligne courante.Alternativement, la clause RANGE
restreint logiquement les lignes d’une section en spécifiant une plage de valeurs relative à la valeur de la ligne courante.Les lignes précédentes et suivantes sont déterminées en fonction de l’ordre donné dans la clause ORDER BY
.
-
Si le cadre de la Window est défini avec une clause
RANGE
, la clauseORDER BY
ne peut contenir qu’une seule expression et l’expression doit être de type numérique,DATE
,TIME
ouTIMESTAMP
.Pour<expr> PRECEDING
, l’expression expr est soustraite de l’expression dansORDER BY
et pour<expr> FOLLOWING
, elle est ajoutée.PourCURRENT ROW
, l’expression dansORDER BY
est utilisée telle quelle.Ensuite, toutes les lignes (dans une section) situées entre les limites sont considérées comme faisant partie du cadre de la Window résultante.
-
Si le cadre de la Window est défini avec une clause
ROWS
, il n’y a aucune restriction sur le nombre et les types d’expressions placées sur la clauseORDER BY
.Dans ce cas, la clause<expr> PRECEDING
indique le nombre de lignes précédant la ligne courante, respectivement la clause<expr> FOLLOWING
indique le nombre de lignes suivant la ligne courante.
Le UNBOUNDED PRECEDING
et le UNBOUNDED FOLLOWING
fonctionnent de la même manière pour les clauses ROWS
et RANGE
.La mention UNBOUNDED PRECEDING
indique que la Window commence à la première ligne de la section. Le UNBOUNDED PRECEDING
ne peut être spécifié que comme point de départ de la Window.La mention UNBOUNDED FOLLOWING
indique que la Window se termine par la dernière ligne de la section. La clause UNBOUNDED FOLLOWING
ne peut être spécifiée que comme point final de la Window.
L’expression CURRENT ROW
indique que la Window commence ou se termine sur la ligne courante lorsqu’elle est utilisée conjointement avec la clause ROWS
,ou que la Window se termine à la valeur courante lorsqu’elle est utilisée avec la clause RANGE
.Le CURRENT ROW
peut être spécifié à la fois comme un point de départ et un point d’arrivée.
La clause BETWEEN
est utilisée en conjonction avec le mot clé ROWS
ou RANGE
pour spécifier le point de limite inférieur (début) ou supérieur (fin) de la Window.La limite supérieure ne peut être plus petite que la limite inférieure.
Note
|
Si seul le point de départ de la Window est spécifié, le point d’arrivée de la Window est considéré comme la |
Certaines fonctions de la Window ignorent l’expression du cadre :
-
ROW_NUMBER
,LAG
etLEAD
fonctionnent toujours commeROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
. -
DENSE_RANK
,RANK
,PERCENT_RANK
etCUME_DIST
travailler commeRANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
. -
FIRST_VALUE
,LAST_VALUE
etNTH_VALUE
travailler sur le cadre, maisRANGE
fonctionne de manière identiqueROWS
.
Ainsi, les options ROWS
et RANGE
offrent une certaine souplesse dans le réglage de la taille de la Window flottante. Les options suivantes sont les plus courantes :
-
La borne inférieure est fixe (elle coïncide avec la première ligne du groupe ordonné) et la borne supérieure est rampante (elle coïncide avec la ligne actuelle du groupe ordonné). Dans ce cas, nous obtenons un total cumulé (agrégat cumulé). Dans ce cas, la taille de la Window change (elle s’agrandit d’un côté) et la Window elle-même se déplace en raison de l’agrandissement. La situation inverse est également possible, lorsque la frontière inférieure est rampante et que la frontière supérieure est fixe. Dans ce cas, la Window s’effilera.
-
Si les limites supérieure et inférieure sont fixes par rapport à la ligne courante, par exemple, 1 ligne avant la ligne courante et 2 après la ligne courante, nous avons un agrégat glissant. Dans ce cas, la taille de la Window est fixe et la Window elle-même coulisse.