| --- |
| { |
| "title": "LAST_VALUE", |
| "language": "en", |
| "description": "LASTVALUE() is a window function that returns the last value within the window frame." |
| } |
| --- |
| |
| ## Description |
| |
| LAST_VALUE() is a window function that returns the last value within the window frame. The handling of null values can be controlled using the IGNORE NULL options. |
| |
| ## Syntax |
| |
| ```sql |
| LAST_VALUE(<expr>[, <ignore_null>]) |
| ``` |
| |
| ## Parameters |
| | Parameter | Description | |
| | ------------------- | ----------------------------------------------------------------------------------------------------------- | |
| | expr | The expression from which to get the last value,supported: tinyint/smallint/int/bigint/float/double/decimal/string/date/datetime/array/struct/map/bitmap | |
| | ignore_null | Optional Boolean Type. When set, null values are ignored, returning the last non-null value | |
| |
| ## Return Value |
| |
| Returns the same data type as the input expression. |
| |
| ## Examples |
| |
| ```sql |
| WITH example_data AS ( |
| SELECT 1 as id, 21 as myday, '04-21-11' as time_col, NULL as state |
| UNION ALL |
| SELECT 2, 21, '04-21-12', 2 |
| UNION ALL |
| SELECT 3, 21, '04-21-13', 3 |
| UNION ALL |
| SELECT 4, 22, '04-22-10-21', NULL |
| UNION ALL |
| SELECT 5, 22, '04-22-10-22', NULL |
| UNION ALL |
| SELECT 6, 22, '04-22-10-23', 5 |
| UNION ALL |
| SELECT 7, 22, '04-22-10-24', NULL |
| UNION ALL |
| SELECT 8, 22, '04-22-10-25', 9 |
| UNION ALL |
| SELECT 9, 23, '04-23-11', NULL |
| UNION ALL |
| SELECT 10, 23, '04-23-12', 10 |
| UNION ALL |
| SELECT 11, 23, '04-23-13', NULL |
| UNION ALL |
| SELECT 12, 24, '02-24-10-21', NULL |
| ) |
| SELECT |
| *, |
| last_value(`state`, 1) OVER( |
| PARTITION BY `myday` |
| ORDER BY `time_col` DESC |
| ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING |
| ) as ignore_null, |
| last_value(`state`, 0) OVER( |
| PARTITION BY `myday` |
| ORDER BY `time_col` DESC |
| ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING |
| ) as not_ignore_null, |
| last_value(`state`) OVER( |
| PARTITION BY `myday` |
| ORDER BY `time_col` DESC |
| ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING |
| ) as ignore_null_default |
| FROM example_data |
| ORDER BY `id`, `myday`, `time_col`; |
| ``` |
| |
| ```text |
| +------+-------+-------------+-------+-------------+-----------------+---------------------+ |
| | id | myday | time_col | state | ignore_null | not_ignore_null | ignore_null_default | |
| +------+-------+-------------+-------+-------------+-----------------+---------------------+ |
| | 1 | 21 | 04-21-11 | NULL | 2 | NULL | NULL | |
| | 2 | 21 | 04-21-12 | 2 | 2 | NULL | NULL | |
| | 3 | 21 | 04-21-13 | 3 | 2 | 2 | 2 | |
| | 4 | 22 | 04-22-10-21 | NULL | NULL | NULL | NULL | |
| | 5 | 22 | 04-22-10-22 | NULL | 5 | NULL | NULL | |
| | 6 | 22 | 04-22-10-23 | 5 | 5 | NULL | NULL | |
| | 7 | 22 | 04-22-10-24 | NULL | 5 | 5 | 5 | |
| | 8 | 22 | 04-22-10-25 | 9 | 9 | NULL | NULL | |
| | 9 | 23 | 04-23-11 | NULL | 10 | NULL | NULL | |
| | 10 | 23 | 04-23-12 | 10 | 10 | NULL | NULL | |
| | 11 | 23 | 04-23-13 | NULL | 10 | 10 | 10 | |
| | 12 | 24 | 02-24-10-21 | NULL | NULL | NULL | NULL | |
| +------+-------+-------------+-------+-------------+-----------------+---------------------+ |
| ``` |