跳到主要内容
跳到主要内容

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 │
└─────────────────────────────┴───────────────┘