Summary: in this tutorial, you will learn how to use the Oracle NTH_VALUE()
function to get the Nth value in a set of values.
Introduction to Oracle NTH_VALUE() function #
The Oracle NTH_VALUE()
function is an analytic function that returns the Nth value in a set of values.
Here’s the basic syntax of the NTH_VALUE()
function:
NTH_VALUE (expression, N) [ FROM { FIRST | LAST } ] [ { RESPECT | IGNORE } NULLS ] OVER ( [ partition_clause ] order_by_clause [frame_clause] )
Code language: SQL (Structured Query Language) (sql)
In this syntax:
expression #
is any valid expression evaluated against the Nth row of the window frame.
N #
Specifies the Nth row in the window frame defined by the frame_clause
. N must be a positive integer such as 1, 2, and 3.
The NTH_VALUE()
function will return NULL
if the Nth row does not exist.
FROM { FIRST | LAST } #
This determines whether the calculation starts at the first or last row of the window frame. The default is FROM FIRST
.
[ { RESPECT | IGNORE } NULLS ] #
This determines whether NULL is included in or eliminated from the calculation. The default is RESPECT NULLS
.
partition_clause #
The partition_clause
clause divides the rows into partitions to which the NTH_VALUE()
function is applied. The partition_clause
clause is not mandatory. If you skip it, the NTH_VALUE()
function will treat the whole result set as a single partition.
order_by_clause #
The order_by_clause
clause specifies the order of rows in each partition to which the NTH_VALUE()
function is applied.
frame_clause #
The frame_clause
defines the frame of the current partition.
Oracle NTH_VALUE() function examples #
We’ll use the products
table from the sample database for the demonstration:

Using Oracle NTH_VALUE() function to find the nth value #
The following example uses the NTH_VALUE()
function to return all the products and also the second most expensive one:
SELECT product_id, product_name, list_price, NTH_VALUE (product_name, 2) OVER ( ORDER BY list_price DESC RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) AS second_most_expensive_product FROM products;
Code language: SQL (Structured Query Language) (sql)
The following picture shows the partial output:

Using Oracle NTH_VALUE() function to find the nth value in each partition #
The following query uses the NTH_VALUE()
function to get all the products as well as the second most expensive product by category:
SELECT product_id, product_name, category_id, list_price, NTH_VALUE (product_name, 2) OVER ( PARTITION BY category_id ORDER BY list_price DESC RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) AS second_most_expensive_product FROM products;
Code language: SQL (Structured Query Language) (sql)
Summary #
- Use the Oracle
NTH_VALUE()
function to get the Nth value in a set of values.