Course contentsShow
← Databases & SQL
Lesson 284 of 1,9534. Advanced Data AggregationFree lesson

Nth Value Extraction Techniques

Identify and extract specific data points at ordinal positions within a window.

In this lesson, you will learn how to reach into a sorted partition of data and pluck out a specific value based on its ordinal position, such as the second, third, or hundredth row.

Beyond the First and Last

In our previous sessions, we used LAG and LEAD to peek at immediate neighbors, and cumulative aggregates to summarize data over a range. However, sometimes you don’t need the previous row or a running total; you need the exact value sitting at a specific rank within your analytical frame. This is where NTH_VALUE comes into play.

The Mechanics of Extraction

The NTH_VALUE function allows you to specify a numerical offset to target a exact row. Think of it like an index for your result set: if you have a list of sales transactions partitioned by region and ordered by date, NTH_VALUE(amount, 3) will retrieve the amount from the third transaction in that specific region.

Here is how it looks in practice:

SELECT 
    region,
    amount,
    NTH_VALUE(amount, 3) OVER (
        PARTITION BY region 
        ORDER BY amount DESC
        ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
    ) AS third_highest_sale
FROM sales;

Critical Implementation Details

There is a subtle trap for beginners here: the Frame Clause. By default, window functions often look only from the start of the partition up to the current row. If you are looking for the "3rd value" but the window frame is restricted to the current row and everything before it, the function might return NULL for rows 1 and 2.

To ensure NTH_VALUE can "see" the entire set regardless of where you are in the partition, you typically need to set the frame to ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING. This ensures the database evaluates the entire set of peer data before extracting the target position. By combining this with your existing knowledge of PARTITION BY and ORDER BY, you gain surgical precision over your result sets.

Key Takeaway: NTH_VALUE allows for precise extraction of specific ordinal records, but always define an UNBOUNDED window frame to ensure the target position is visible to the entire partition.