Skip to content

extra_window_functions

Extra Window Functions for PostgreSQL

Overview

PackageVersionCategoryLicenseLanguage
extra_window_functions2.0FUNCPostgreSQLC
IDExtensionBinLibLoadCreateTrustRelocSchema
4730extra_window_functionsNoYesNoYesNoYes-

Version

TypeRepoVersionPG VerPackageDeps
EXTPGDG2.01817161514extra_window_functions-
RPMPGDG2.01817161514extra_window_functions_$v-
DEBPGDG2.01817161514postgresql-$v-extra-window-functions-
OS / PGPG18PG17PG16PG15PG14
el8.x86_64
el8.aarch64
el9.x86_64
el9.aarch64
el10.x86_64
el10.aarch64
d12.x86_64
d12.aarch64
d13.x86_64
d13.aarch64
u22.x86_64
u22.aarch64
u24.x86_64
u24.aarch64
u26.x86_64
u26.aarch64

Install

You can install extra_window_functions directly. First, make sure the PGDG repository is added and enabled:

pig repo add pgdg -u          # Add PGDG repo and update cache

Install the extension using pig or apt/yum/dnf:

Install
pig install extra_window_functions;          # Install for current active PG version
pig
pig ext install -y extra_window_functions -v 18  # PG 18
pig ext install -y extra_window_functions -v 17  # PG 17
pig ext install -y extra_window_functions -v 16  # PG 16
pig ext install -y extra_window_functions -v 15  # PG 15
pig ext install -y extra_window_functions -v 14  # PG 14
dnf
dnf install -y extra_window_functions_18       # PG 18
dnf install -y extra_window_functions_17       # PG 17
dnf install -y extra_window_functions_16       # PG 16
dnf install -y extra_window_functions_15       # PG 15
dnf install -y extra_window_functions_14       # PG 14
apt
apt install -y postgresql-18-extra-window-functions   # PG 18
apt install -y postgresql-17-extra-window-functions   # PG 17
apt install -y postgresql-16-extra-window-functions   # PG 16
apt install -y postgresql-15-extra-window-functions   # PG 15
apt install -y postgresql-14-extra-window-functions   # PG 14

Create Extension:

CREATE EXTENSION extra_window_functions;

Usage

Sources:

Provides window functions that simulate SQL Standard features not available in PostgreSQL syntax, plus novel functions like flip_flop.

CREATE EXTENSION extra_window_functions;

Functions Simulating SQL Standard

FunctionDescription
lag_ignore_nulls(expr [, offset [, default]])LAG that skips NULL values
lead_ignore_nulls(expr [, offset [, default]])LEAD that skips NULL values
first_value_ignore_nulls(expr)FIRST_VALUE skipping NULLs
last_value_ignore_nulls(expr)LAST_VALUE skipping NULLs
nth_value_from_last(expr, offset)NTH_VALUE counting from end of frame
nth_value_ignore_nulls(expr, offset)NTH_VALUE skipping NULLs
nth_value_from_last_ignore_nulls(expr, offset)NTH_VALUE from last, skipping NULLs

Functions Extending SQL Standard (with default values)

FunctionDescription
first_value_ignore_nulls(expr, default)FIRST_VALUE with default when out of frame
last_value_ignore_nulls(expr, default)LAST_VALUE with default when out of frame
nth_value_from_last(expr, offset, default)NTH_VALUE from last with default
nth_value_ignore_nulls(expr, offset, default)NTH_VALUE with default, skipping NULLs
nth_value_from_last_ignore_nulls(expr, offset, default)Combined from-last, ignore-nulls, with default

Non-Standard Functions

FunctionDescription
flip_flop(expr [, expr])Flip-flop operator: returns false until first expr is true, then true until second expr matches

Examples

-- Equivalent to SQL Standard: NTH_VALUE(x, 3) FROM LAST IGNORE NULLS OVER w
SELECT nth_value_from_last_ignore_nulls(x, 3) OVER w FROM t WINDOW w AS (ORDER BY id);

-- Fill forward: carry last non-null value
SELECT lag_ignore_nulls(val, 1) OVER (ORDER BY ts) FROM measurements;

Version 2.0 and Window Frames

Version 2.0 adds count_ties(), avg_rank(), avg_percent_rank(), group_number(boolean), run_length(anyelement), run_position(anyelement), ema(double precision, double precision), interpolate(double precision) and most_common(anyelement). These functions cover peer groups, runs, smoothing and interpolation. Their frame and ordering rules differ: choose ORDER BY and the window frame deliberately, and inspect the official function reference rather than treating every function as an aggregate.

The lag example reads the previous non-null value; use last_value_ignore_nulls over a frame ending at the current row when the current non-null value must also be retained. Upgrade existing installations with ALTER EXTENSION extra_window_functions UPDATE TO '2.0'. The relocatable C extension does not require preload; installation normally needs a superuser. Upstream supports PostgreSQL 9.6–19. PostgreSQL 19 provides standard IGNORE NULLS for several functions, while FROM LAST and the extra 2.0 functions have their own uses.

Was this page helpful?