Function Reference

LAST_VALUE

Returns the value of column from the last row of the window frame.

PostgreSQL 17.5
LAST_VALUE(column) OVER ([PARTITION BY ...] [ORDER BY ...] [frame])

Parameters

column
Column or expression whose value is returned
PARTITION BYoptional
Columns that split rows into partitions
ORDER BYoptional
Order of rows in the partition that defines which row is last
framekeywordoptional
Window frame: ROWS, RANGE or GROUPS BETWEEN start AND end; by default, with ORDER BY, from the start of the partition to the current row together with rows equal to it in ORDER BY, without ORDER BY, the whole partition; the whole partition explicitly is ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING

Return value

A value of the same type as column

Examples

Youngest member in each status

PostgreSQL 17.5
SELECT member_name,
	status,
	birthday,
	LAST_VALUE(member_name) OVER (
		PARTITION BY status
		ORDER BY birthday ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
	) AS youngest_in_status
FROM FamilyMembers;
member_namestatusbirthdayyoungest_in_status
Lela Quinceydaughter1985-06-07Wednesday Addams
Annie Quinceydaughter1988-04-10Wednesday Addams
Wednesday Addamsdaughter2005-01-13Wednesday Addams
Headley Quinceyfather1960-05-13Ernest Forrest
Ernest Forrestfather1961-09-11Ernest Forrest
Flavia Quinceymother1963-02-16Constance Forrest
Constance Forrestmother1968-09-06Constance Forrest
Andie Quinceyson1983-06-05Andie Quincey

Default frame ends at the current row

PostgreSQL 17.5
SELECT member_name,
	status,
	birthday,
	LAST_VALUE(member_name) OVER (
		PARTITION BY status
		ORDER BY birthday
	) AS last_in_frame
FROM FamilyMembers;
member_namestatusbirthdaylast_in_frame
Lela Quinceydaughter1985-06-07Lela Quincey
Annie Quinceydaughter1988-04-10Annie Quincey
Wednesday Addamsdaughter2005-01-13Wednesday Addams
Headley Quinceyfather1960-05-13Headley Quincey
Ernest Forrestfather1961-09-11Ernest Forrest
Flavia Quinceymother1963-02-16Flavia Quincey
Constance Forrestmother1968-09-06Constance Forrest
Andie Quinceyson1983-06-05Andie Quincey

Details

With ORDER BY the default frame ends at the current row (and rows with the same ORDER BY value), not at the end of the partition, so without an explicit frame the function often returns the value of the current row. How to set a frame is described in ROWS BETWEEN.

See also

Where to learn