IntermediateWindow Functions

FIRST_VALUE / LAST_VALUE per group

The query

SQL
SELECT
  dept_id,
  first_name,
  last_name,
  salary,
  FIRST_VALUE(first_name || ' ' || last_name) OVER (
    PARTITION BY dept_id ORDER BY salary DESC
    ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
  ) AS highest_earner_in_dept,
  LAST_VALUE(salary) OVER (
    PARTITION BY dept_id ORDER BY salary DESC
    ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
  ) AS lowest_salary_in_dept
FROM employees
ORDER BY dept_id, salary DESC;
Tested against PostgreSQL 16

Note

LAST_VALUE requires ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING to see full window.

Tables referenced