Returns the value of expr from the first row of the current window.
Limits
Window functions are supported only in
SELECTstatements.A window function cannot contain nested window functions or nested aggregate functions.
Window functions cannot be used together with aggregate functions at the same query level.
Syntax
first_value(<expr>[, <ignore_nulls>]) over ([partition_clause] [orderby_clause] [frame_clause])For details on partition_clause, orderby_clause, and frame_clause, see windowing_definition.
Parameters
| Parameter | Required | Type | Description |
|---|---|---|---|
expr | Yes | Any | The expression whose value is returned. |
ignore_nulls | No | BOOLEAN | Specifies whether to skip null values when finding the first row. Default value: false. When set to true, returns a non-null value of expr that corresponds to the first row of the window. |
Return value
Returns a value of the same data type as expr.
Examples
The following examples use an emp table. Create the table and load the sample data:
create table if not exists emp
(empno bigint,
ename string,
job string,
mgr bigint,
hiredate datetime,
sal bigint,
comm bigint,
deptno bigint);
tunnel upload emp.txt emp;The emp.txt file contains the following rows:
7369,SMITH,CLERK,7902,1980-12-17 00:00:00,800,,20
7499,ALLEN,SALESMAN,7698,1981-02-20 00:00:00,1600,300,30
7521,WARD,SALESMAN,7698,1981-02-22 00:00:00,1250,500,30
7566,JONES,MANAGER,7839,1981-04-02 00:00:00,2975,,20
7654,MARTIN,SALESMAN,7698,1981-09-28 00:00:00,1250,1400,30
7698,BLAKE,MANAGER,7839,1981-05-01 00:00:00,2850,,30
7782,CLARK,MANAGER,7839,1981-06-09 00:00:00,2450,,10
7788,SCOTT,ANALYST,7566,1987-04-19 00:00:00,3000,,20
7839,KING,PRESIDENT,,1981-11-17 00:00:00,5000,,10
7844,TURNER,SALESMAN,7698,1981-09-08 00:00:00,1500,0,30
7876,ADAMS,CLERK,7788,1987-05-23 00:00:00,1100,,20
7900,JAMES,CLERK,7698,1981-12-03 00:00:00,950,,30
7902,FORD,ANALYST,7566,1981-12-03 00:00:00,3000,,20
7934,MILLER,CLERK,7782,1982-01-23 00:00:00,1300,,10
7948,JACCKA,CLERK,7782,1981-04-12 00:00:00,5000,,10
7956,WELAN,CLERK,7649,1982-07-20 00:00:00,2450,,10
7956,TEBAGE,CLERK,7748,1982-12-30 00:00:00,1300,,10Without ORDER BY
Partition employees by department and return the salary of the first employee in each partition.
select deptno, ename, sal,
first_value(sal) over (partition by deptno) as first_value
from emp;Result:
+------------+------------+------------+-------------+
| deptno | ename | sal | first_value |
+------------+------------+------------+-------------+
| 10 | TEBAGE | 1300 | 1300 | -- This row is the first row of the current window.
| 10 | CLARK | 2450 | 1300 |
| 10 | KING | 5000 | 1300 |
| 10 | MILLER | 1300 | 1300 |
| 10 | JACCKA | 5000 | 1300 |
| 10 | WELAN | 2450 | 1300 |
| 20 | FORD | 3000 | 3000 | -- This row is the first row of the current window.
| 20 | SCOTT | 3000 | 3000 |
| 20 | SMITH | 800 | 3000 |
| 20 | ADAMS | 1100 | 3000 |
| 20 | JONES | 2975 | 3000 |
| 30 | TURNER | 1500 | 1500 | -- This row is the first row of the current window.
| 30 | JAMES | 950 | 1500 |
| 30 | ALLEN | 1600 | 1500 |
| 30 | WARD | 1250 | 1500 |
| 30 | MARTIN | 1250 | 1500 |
| 30 | BLAKE | 2850 | 1500 |
+------------+------------+------------+-------------+With ORDER BY
Return the highest salary in each department by ordering rows within each partition by sal DESC. The first row in each ordered partition is the employee with the highest salary.
select deptno, ename, sal,
first_value(sal) over (partition by deptno order by sal desc) as first_value
from emp;Result:
+------------+------------+------------+-------------+
| deptno | ename | sal | first_value |
+------------+------------+------------+-------------+
| 10 | JACCKA | 5000 | 5000 | -- This row is the first row of the current window.
| 10 | KING | 5000 | 5000 |
| 10 | CLARK | 2450 | 5000 |
| 10 | WELAN | 2450 | 5000 |
| 10 | TEBAGE | 1300 | 5000 |
| 10 | MILLER | 1300 | 5000 |
| 20 | SCOTT | 3000 | 3000 | -- This row is the first row of the current window.
| 20 | FORD | 3000 | 3000 |
| 20 | JONES | 2975 | 3000 |
| 20 | ADAMS | 1100 | 3000 |
| 20 | SMITH | 800 | 3000 |
| 30 | BLAKE | 2850 | 2850 | -- This row is the first row of the current window.
| 30 | ALLEN | 1600 | 2850 |
| 30 | TURNER | 1500 | 2850 |
| 30 | MARTIN | 1250 | 2850 |
| 30 | WARD | 1250 | 2850 |
| 30 | JAMES | 950 | 2850 |
+------------+------------+------------+-------------+Related functions
FIRST_VALUE is a window function. For the full list of window functions, see Window functions.