NTH_VALUE
Returns the value of the expression evaluated against the Nth row in the window frame.
This built-in window function calculates the window frame for each row in the same way as an aggregate window function. It returns the value of the expression evaluated against row N of the window frame. Rows are numbered within the window frame starting from 1 in the order defined by the ORDER BY clause if present, or in arbitrary order otherwise. If there is no Nth row in the partition, then NULL is returned.
See also:
[SELECT] [FIRST_VALUE] [LAST_VALUE]
Syntax
SELECT NTH_VALUE(expr, N) OVER (
[PARTITION BY column]
ORDER BY column
[ROWS BETWEEN frame_start AND frame_end]
) FROM <multipartIdentifier>;
Arguments
expr The expression to evaluate against the Nth row in the window frame.
N A positive integer specifying which row number to retrieve (1-indexed).
PARTITION BY column
Optional. Divides the result set into partitions. The NTH_VALUE function is applied within each partition separately.
ORDER BY column Specifies the order in which rows are processed.
ROWS BETWEEN frame_start AND frame_end Optional. Defines the window frame.
Return Value(s)
Returns the value of the expression evaluated against the Nth row in the window frame, or NULL if the Nth row does not exist.
Examples
Get the second-highest contributor
-- Get the top 3 contributors by name for comparison
SELECT
login,
contributions,
NTH_VALUE(login, 1) OVER (ORDER BY contributions DESC
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) as top_contributor,
NTH_VALUE(login, 2) OVER (ORDER BY contributions DESC
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) as second_contributor,
NTH_VALUE(login, 3) OVER (ORDER BY contributions DESC
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) as third_contributor
FROM github.repos.contributors
WHERE owner = 'stackql'
AND repo = 'stackql';
For more information, see https://sqlite.org/windowfunctions.html#built-in_window_functions.