Skip to main content
Since 1.14.0 Calculate the change in a counter over the time period covered by a counter aggregate. Data points at the exact boundaries of the time period aren’t needed. The function interpolates the counter values at the boundaries from adjacent counter aggregates if needed.

Arguments

NameTypeDefaultRequiredDescription
summaryCounterSummary-A counter aggregate created using counter_agg
startTIMESTAMPTZ-The start of the time period to compute the delta over
intervalINTERVAL-The length of the time period to compute the delta over
prevCounterSummary-The counter aggregate from the previous interval, used to interpolate the value at start. If NULL, the first timestamp in summary is used as the start of the interval.
nextCounterSummary-The counter aggregate from the next interval, used to interpolate the value at start + interval. If NULL, the last timestamp in summary is used as the end of the interval.

Returns

DOUBLE PRECISION: The delta between the first and last points of the time interval. If exact values are missing in the raw data for the first and last points, these values are interpolated linearly from the neighboring counter aggregates.

Samples

Calculate the counter delta for each 15-minute interval, using interpolation to get the values at the interval boundaries if they don’t exist in the data.
SELECT
    id,
    bucket,
    interpolated_delta(
        summary,
        bucket,
        '15 min',
        LAG(summary) OVER (PARTITION BY id ORDER by bucket),
        LEAD(summary) OVER (PARTITION BY id ORDER by bucket)
    )
FROM (
    SELECT
        id,
        time_bucket('15 min'::interval, ts) AS bucket,
        counter_agg(ts, val) AS summary
    FROM foo
    GROUP BY id, time_bucket('15 min'::interval, ts)
) t