跳至主要内容

last_value

选择最后遇到的值,类似于 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 │
└─────────────────────────────┴───────────────┘