选择最后遇到的值,类似于 anyLast,但可以接受 NULL。
它通常应与窗口函数一起使用。
如果不使用窗口函数,且源数据流未排序,则结果将是随机的。
示例
CREATE TABLE test_data
(
a Int64,
b Nullable(Int64)
)
ENGINE = Memory;
INSERT INTO test_data (a, b) VALUES (1,null), (2,3), (4, 5), (6,null)示例 1
默认情况下,NULL 值会被忽略。
SELECT last_value(b) FROM test_data┌─last_value_ignore_nulls(b)─┐
│ 5 │
└────────────────────────────┘示例 2
NULL 值将被忽略。
SELECT last_value(b) ignore nulls FROM test_data┌─last_value_ignore_nulls(b)─┐
│ 5 │
└────────────────────────────┘示例 3
可接受 NULL 值。
SELECT last_value(b) respect nulls FROM test_data┌─last_value_respect_nulls(b)─┐
│ ᴺᵁᴸᴸ │
└─────────────────────────────┘示例 4
使用带有 ORDER BY 的子查询获得稳定的结果。
SELECT
last_value_respect_nulls(b),
last_value(b)
FROM
(
SELECT *
FROM test_data
ORDER BY a ASC
)┌─last_value_respect_nulls(b)─┬─last_value(b)─┐
│ ᴺᵁᴸᴸ │ 5 │
└─────────────────────────────┴───────────────┘