MAX_BY_NON_NULL()

MAX_BY_NON_NULL(value, order_by, tie_breaker) 返回每个分组中 order_by 最大的行的 value,并跳过 NULL 值,因此即使最新一行没有值,也会返回最近的非空观测值。

描述

MAX_BY_NON_NULL(value, order_by, tie_breaker) 的行为与 MAX_BY() 类似,但会忽略 NULL 值。当 order_by 值最大的行的 valueNULL 时,该函数会回退到 order_by 次大的行的非空 value

这在跟踪某个可能间歇性为 NULL 的列的最近观测值时非常有用,例如传感器读数或仅偶尔填充的状态字段。

语法

MAX_BY_NON_NULL(value, order_by [, tie_breaker])

参数

参数

说明

value

为选中行返回的列或表达式。

order_by

决定选中哪一行的列或表达式,最大值胜出。

tie_breaker

可选。用于在 order_by 值相同的行之间打破并列的第三个表达式。

返回值

返回 order_by 值最大的行的非空 value。如果分组内所有 value 值均为 NULL,则结果为 NULL

示例

DROP DATABASE IF EXISTS max_by_non_null_demo;
CREATE DATABASE max_by_non_null_demo;
USE max_by_non_null_demo;

CREATE TABLE readings (grp INT, value VARCHAR(20), ts BIGINT, tie VARCHAR(20));
INSERT INTO readings VALUES
    (1, 'older', 10, 'a'),
    (1, NULL, 12, 'a'),
    (2, 'kept', 1, 'a'),
    (2, NULL, 5, 'z');
SELECT grp,
       MAX_BY(value, ts, tie) AS latest_value,
       MAX_BY_NON_NULL(value, ts, tie) AS latest_non_null_value
FROM readings GROUP BY grp ORDER BY grp;

DROP DATABASE max_by_non_null_demo;