Selector 函数
Selector 是时序场景专用的聚合函数:和普通聚合一样把组内多行归并为一行,但同时返回选中行的 value 和 time 两个字段——普通 SQL 聚合(如 min)只能给出极值本身,无法回答「极值发生在什么时刻」,selector 正是为此设计。
| 函数 | 别名 | 说明 |
|---|---|---|
selector_first |
— | 组内 time 最早一行的 value 与 time |
selector_last |
— | 组内 time 最晚一行的 value 与 time |
selector_min |
— | 组内 value 最小一行的 value 与 time |
selector_max |
— | 组内 value 最大一行的 value 与 time |
返回值与取字段
四个函数都返回 struct {value, time},用 ['value'] / ['time'] 取字段(字段名用单引号):
1SELECT
2 selector_min(water_level, time)['time'],
3 selector_min(water_level, time)['value']
4FROM h2o_feet;
下文示例基于同一份样例数据:
1+---------------------+-------------+
2| time | water_level |
3+---------------------+-------------+
4| 2019-08-28T07:22:00 | 9.8 |
5| 2019-08-28T07:23:00 | 9.7 |
6| 2019-08-28T07:24:00 | 10.0 |
7| 2019-08-28T07:25:00 | 9.9 |
8+---------------------+-------------+
selector_first
返回组内 time 最早一行的 value 与 time。若多行并列最早时间戳,返回其中任意一行。
语法:selector_first(value_expression, time_expression)
参数:
value_expression:要选取的字段表达式,可以是列名或表达式。time_expression:timestamp 表达式,通常是time列。
示例:
1> SELECT selector_first(water_level, time) FROM h2o_feet;
2+----------------------------------------------------+
3| selector_first(h2o_feet.water_level,h2o_feet.time) |
4+----------------------------------------------------+
5| {value: 9.8, time: 2019-08-28T07:22:00} |
6+----------------------------------------------------+
相关函数:selector_last
selector_last
返回组内 time 最晚一行的 value 与 time。若多行并列最晚时间戳,返回其中任意一行。
语法:selector_last(value_expression, time_expression)
参数:
value_expression:要选取的字段表达式,可以是列名或表达式。time_expression:timestamp 表达式,通常是time列。
示例:
1> SELECT selector_last(water_level, time) FROM h2o_feet;
2+---------------------------------------------------+
3| selector_last(h2o_feet.water_level,h2o_feet.time) |
4+---------------------------------------------------+
5| {value: 9.9, time: 2019-08-28T07:25:00} |
6+---------------------------------------------------+
相关函数:selector_first
selector_min
返回组内 value 最小一行的 value 与 time。若多行并列最小值,取其中时间戳最小的一行。
语法:selector_min(value_expression, time_expression)
参数:
value_expression:要比较并选取的字段表达式。time_expression:timestamp 表达式,通常是time列。
示例:
1> SELECT selector_min(water_level, time) FROM h2o_feet;
2+--------------------------------------------------+
3| selector_min(h2o_feet.water_level,h2o_feet.time) |
4+--------------------------------------------------+
5| {value: 9.7, time: 2019-08-28T07:23:00} |
6+--------------------------------------------------+
相关函数:selector_max
selector_max
返回组内 value 最大一行的 value 与 time。若多行并列最大值,取其中时间戳最小的一行。
语法:selector_max(value_expression, time_expression)
参数:
value_expression:要比较并选取的字段表达式。time_expression:timestamp 表达式,通常是time列。
示例:
1> SELECT selector_max(water_level, time) FROM h2o_feet;
2+--------------------------------------------------+
3| selector_max(h2o_feet.water_level,h2o_feet.time) |
4+--------------------------------------------------+
5| {value: 10.0, time: 2019-08-28T07:24:00} |
6+--------------------------------------------------+
相关函数:selector_min
按分组使用
selector 与 GROUP BY 组合可得到每个序列的首末/极值点,例如每个采集点最近一次上报:
1SELECT
2 location,
3 selector_last(water_level, time)['value'] AS last_level,
4 selector_last(water_level, time)['time'] AS last_time
5FROM h2o_feet
6GROUP BY location;
评价此篇文章
