PostgreSQL – FIRST_VALUE Function
The FIRST_VALUE()
function is used to retrieve the first value in an ordered set of rows within a result set. This function is often used in combination with the OVER
clause to perform calculations on a window of rows, and then extract the first value from that window. It’s useful for scenarios where you want to get the earliest or first occurrence of a certain value within a specific order.
The syntax of the FIRST_VALUE()
function is as follows:
FIRST_VALUE(expression) OVER (PARTITION BY partition_expression ORDER BY sort_expression)
expression
: This is the column or expression whose first value you want to retrieve.PARTITION BY
: An optional clause that divides the result set into partitions or groups. The function is applied separately within each partition. If omitted, the function is applied to the entire result set.ORDER BY
: Specifies the column(s) by which you want to order the result set for determining the first value.
Here’s a simple example of how to use the FIRST_VALUE()
function in PostgreSQL:
Suppose you have a table named “sales” with columns “product_name”, “sale_date”, and “revenue”, and you want to find the first sale date for each product:
SELECT product_name, sale_date, revenue, FIRST_VALUE(sale_date) OVER (PARTITION BY product_name ORDER BY sale_date) AS first_sale_date FROM sales;
In this example, the FIRST_VALUE()
function retrieves the first sale date for each product. It orders the rows within each product partition by sale date and extracts the earliest sale date. The result might look like this:
product_name | sale_date | revenue | first_sale_date
-------------+------------+---------+-----------------
Product A | 2023-01-05 | 100 | 2023-01-05
Product A | 2023-02-10 | 150 | 2023-01-05
Product B | 2023-03-15 | 200 | 2023-03-15
Product B | 2023-03-20 | 180 | 2023-03-15
In this output, the “first_sale_date” column shows the earliest sale date for each product based on the order of sale dates.
The FIRST_VALUE()
function is particularly useful when you want to extract specific information related to the first occurrence of a certain condition or value within a partitioned window of data.