Oihana PHP Arango

aqlWindow.php

Table of Contents

Functions

aqlWindow()  : string
Builds an AQL `WINDOW` clause for sliding-window aggregation (running totals, rolling averages, and other statistical properties over related rows).

Functions

aqlWindow()

Builds an AQL `WINDOW` clause for sliding-window aggregation (running totals, rolling averages, and other statistical properties over related rows).

aqlWindow([array<string|int, mixed> $init = [] ]) : string

Two forms are supported, selected by the presence of AQL::RANGE_VALUE:

Row-based (a fixed number of adjacent rows) — no rangeValue:

WINDOW { preceding: numPrecedingRows, following: numFollowingRows }
AGGREGATE variableName = aggregateExpression

Range-based (a value or duration range around rangeValue) — with rangeValue:

WINDOW rangeValue WITH { preceding: offsetPreceding, following: offsetFollowing }
AGGREGATE variableName = aggregateExpression

The WITH keyword here belongs to the range-based WINDOW syntax and is unrelated to the collection-declaring WITH operation (aqlWith()).

Supported $init keys

Key Type Description
AQL::AGGREGATE array Aggregation expressions, e.g. ['rollingAvg' => 'AVG(doc.val)']. Required.
AQL::PRECEDING int float
AQL::FOLLOWING int float
AQL::RANGE_VALUE string The row-value expression for a range-based window (e.g. 'doc.time'). When set, the range-based form is emitted.

Bound values are serialized as-is when numeric and single-quoted when given as strings (so ISO 8601 durations like PT1H / P1Y6M are emitted as 'PT1H'). A bound that is null is omitted from the { … } object.

For a running total (aggregate every row from the start up to the current one), use the string 'unbounded' as the preceding bound — e.g. [ AQL::PRECEDING => 'unbounded' , AQL::FOLLOWING => 0 , … ] yields WINDOW { preceding: 'unbounded', following: 0 } AGGREGATE ….

Examples

Row-based rolling average (previous, current, next row):

echo aqlWindow
([
    AQL::PRECEDING => 1 ,
    AQL::FOLLOWING => 1 ,
    AQL::AGGREGATE => [ 'rollingAvg' => 'AVG(doc.val)' ] ,
]);
// WINDOW { preceding: 1, following: 1 } AGGREGATE rollingAvg = AVG(doc.val)

Range-based sum over a duration window:

echo aqlWindow
([
    AQL::RANGE_VALUE => 'doc.time' ,
    AQL::PRECEDING   => 'PT1H' ,
    AQL::FOLLOWING   => 0 ,
    AQL::AGGREGATE   => [ 'total' => 'SUM(doc.val)' ] ,
]);
// WINDOW doc.time WITH { preceding: 'PT1H', following: 0 } AGGREGATE total = SUM(doc.val)
Parameters
$init : array<string|int, mixed> = []

Associative array of window options.

Tags
see
https://docs.arangodb.com/stable/aql/high-level-operations/window/
since
1.0.0
author

Marc Alcaraz

Return values
string

The compiled AQL WINDOW clause, or an empty string when no aggregate is supplied (a WINDOW without aggregation is meaningless).

On this page

Search results