General-purpose window functions
row_number()
The row_number() function assigns a unique sequential integer to each row within a partition of a result set. The numbering starts at 1 for the first row in each partition and increments by 1 for each subsequent row.
row_number() can be used to turn non-unique rows into unique rows. This could be used to eliminate duplicate rows.
The syntax of row_number() is:
Example
We recommend using
row_number() only for top-N pattern queries. For details about this pattern, see Top-N by group.rank()
rank() returns the rank of the current row, with gaps; that is, the row_number of the first row in its peer group.
The syntax of rank() is:
Example
dense_rank()
dense_rank() returns the rank of the current row, without gaps; that is, if some rows share the same rank, the row next to them is assigned the next consecutive rank.
The syntax of dense_rank() is:
Example
lag() and lead()
lag() allows you to access the value of a previous row in the result set. You can specify the number of rows to look back.
The syntax of lag() is:
Example
lead() is similar to lag(), but it allows you to access the value of a subsequent row in the result set.
The syntax of lead() is:
Example
first_value() and last_value()
The first_value() function returns the value of the first row in the current window frame. If IGNORE NULLS is present, first_value() returns the first non-null value.
The syntax of first_value() is:
Example
last_value() returns the value of the last row in the current window frame. If IGNORE NULLS is present, last_value() returns the last non-null value.
The syntax of last_value() is:
Example
Example
Added in v2.3: Support
IGNORE NULLS.Aggregate window functions
All aggregate functions, including builtin ones such assum() and min(), user-defined ones and AGGREGATE:-prefixed scalar functions, can be used as window functions.
For the complete list of builtin aggregate functions and their usage, see Aggregate functions.