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 值最大的行的 value 为 NULL 时,该函数会回退到 order_by 次大的行的非空 value。
这在跟踪某个可能间歇性为 NULL 的列的最近观测值时非常有用,例如传感器读数或仅偶尔填充的状态字段。
语法¶
MAX_BY_NON_NULL(value, order_by [, tie_breaker])
参数¶
参数 |
说明 |
|---|---|
|
为选中行返回的列或表达式。 |
|
决定选中哪一行的列或表达式,最大值胜出。 |
|
可选。用于在 |
返回值¶
返回 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;