以下内容来自 TDengine 官方文档 及
GitHub 内容 。以下所有示例基于 TDengine 3.1.0.3
TDengine函数大全
1.数学函数
2.字符串函数
3.转换函数
4.时间和日期函数
5.聚合函数
6.选择函数
7.时序数据库特有函数
8.系统函数
BOTTOM
BOTTOM(expr, k)
功能说明:统计表/超级表中某列的值最小 k 个非 NULL 值。如果多条数据取值一样,全部取用又会超出 k 条限制时,系统会从相同值中随机选取符合要求的数量返回。
返回数据类型:同应用的字段。
适用数据类型:数值类型。
适用于:表和超级表。
使用说明:
- k值取值范围 1≤k≤100;
- 限制:BOTTOM 函数不支持 FILL 子句。
示例:文章来源地址https://www.toymoban.com/news/detail-687784.html
> select * from t7;
ts | v1 |
========================================
2023-08-01 01:01:01.000 | 1 |
2023-08-01 01:01:02.000 | 2 |
2023-08-01 01:01:03.000 | 3 |
2023-08-01 01:01:04.000 | 4 |
2023-08-01 01:01:05.000 | 5 |
2023-08-01 01:01:06.000 | 6 |
2023-08-01 01:01:07.000 | 7 |
2023-08-01 01:01:08.000 | 8 |
2023-08-01 01:01:09.000 | 9 |
2023-08-01 01:01:10.000 | 10 |
> select bottom(v1,2) from t7;
bottom(v1,2) |
===============
2 |
1 |
> select ts,bottom(v1,2) from t7;
ts | bottom(v1,2) |
=========================================
2023-08-01 01:01:02.000 | 2 |
2023-08-01 01:01:01.000 | 1 |
> select ts,bottom(v1,3) from t7;
ts | bottom(v1,3) |
=========================================
2023-08-01 01:01:03.000 | 3 |
2023-08-01 01:01:01.000 | 1 |
2023-08-01 01:01:02.000 | 2 |
FIRST
FIRST(expr)
功能说明:统计表/超级表中某列的值最先写入的非 NULL 值。
返回数据类型:同应用的字段。
适用数据类型:所有字段。
适用于:表和超级表。
使用说明:
- 如果要返回各个列的首个(时间戳最小)非 NULL 值,可以使用 FIRST(*);
- 如果结果集中的某列全部为 NULL 值,则该列的返回结果也是 NULL;
- 如果结果集中所有列全部为 NULL 值,则不返回结果。
示例:
> select * from t7;
ts | v1 | v2 |
======================================================
2023-08-01 01:01:00.000 | NULL | NULL |
2023-08-01 01:01:01.000 | 1 | NULL |
2023-08-01 01:01:02.000 | 2 | NULL |
2023-08-01 01:01:03.000 | 3 | NULL |
2023-08-01 01:01:04.000 | 4 | NULL |
2023-08-01 01:01:05.000 | 5 | NULL |
2023-08-01 01:01:06.000 | 6 | NULL |
2023-08-01 01:01:07.000 | 7 | NULL |
2023-08-01 01:01:08.000 | 8 | NULL |
2023-08-01 01:01:09.000 | 9 | NULL |
2023-08-01 01:01:10.000 | 10 | NULL |
> select first(*) from t7;
first(ts) | first(v1) | first(v2) |
======================================================
2023-08-01 01:01:00.000 | 1 | NULL |
> select first(v1) from t7;
first(v1) |
==============
1 |
> select ts,first(v1) from t7;
ts | first(v1) |
========================================
2023-08-01 01:01:01.000 | 1 |
> select ts,first(v2) from t7;
Query OK, 0 row(s) in set (0.001117s)
INTERP
INTERP(expr [, ignore_null_values])
ignore_null_values: {
0
| 1
}
功能说明:返回指定时间截面指定列的记录值或插值。ignore_null_values 参数的值可以是 0 或 1,为 1 时表示忽略 NULL 值, 缺省值为0。
返回数据类型:同字段类型。
适用数据类型:数值类型。
适用于:表和超级表。
使用说明
- INTERP 用于在指定时间断面获取指定列的记录值,如果该时间断面不存在符合条件的行数据,那么会根据 FILL 参数的设定进行插值。
- INTERP 的输入数据为指定列的数据,可以通过条件语句(where 子句)来对原始列数据进行过滤,如果没有指定过滤条件则输入为全部数据。
- INTERP 需要同时与 RANGE,EVERY 和 FILL 关键字一起使用。
- INTERP 的输出时间范围根据 RANGE(timestamp1, timestamp2)字段来指定,需满足 timestamp1 <= timestamp2。其中 timestamp1 为输出时间范围的起始值,即如果 timestamp1 时刻符合插值条件则 timestamp1 为输出的第一条记录,timestamp2 为输出时间范围的结束值,即输出的最后一条记录的 timestamp 不能大于 timestamp2。
- INTERP 根据 EVERY(time_unit) 字段来确定输出时间范围内的结果条数,即从 timestamp1 开始每隔固定长度的时间(time_unit 值)进行插值,time_unit 可取值时间单位:1a(毫秒),1s(秒),1m(分),1h(小时),1d(天),1w(周)。例如 EVERY(500a) 将对于指定数据每500毫秒间隔进行一次插值.
- INTERP 根据 FILL 字段来决定在每个符合输出条件的时刻如何进行插值。
- INTERP 可以在 RANGE 字段中只指定唯一的时间戳对单个时间点进行插值,在这种情况下,EVERY 字段可以省略。例如:SELECT INTERP(col) FROM tb RANGE(‘2023-01-01 00:00:00’) FILL(linear).
- INTERP 作用于超级表时, 会将该超级表下的所有子表数据按照主键列排序后进行插值计算,也可以搭配 PARTITION BY tbname 使用,将结果强制规约到单个时间线。
- INTERP 可以与伪列 _irowts 一起使用,返回插值点所对应的时间戳(3.0.2.0版本以后支持)。
- INTERP 可以与伪列 _isfilled 一起使用,显示返回结果是否为原始记录或插值算法产生的数据(3.0.3.0版本以后支持)。
示例:
> select * from t7;
ts | v1 | v2 |
======================================================
2023-08-01 01:01:00.000 | NULL | NULL |
2023-08-01 01:01:01.000 | 1 | NULL |
2023-08-01 01:01:02.000 | 2 | NULL |
2023-08-01 01:01:03.000 | 3 | NULL |
2023-08-01 01:01:04.000 | 4 | NULL |
2023-08-01 01:01:05.000 | 5 | NULL |
2023-08-01 01:01:06.000 | 6 | NULL |
2023-08-01 01:01:07.000 | 7 | NULL |
2023-08-01 01:01:08.000 | 8 | NULL |
2023-08-01 01:01:09.000 | 9 | NULL |
2023-08-01 01:01:10.000 | 10 | NULL |
> select _irowts,interp(v1) from t7 range('2023-08-01 01:01:01.000','2023-08-01 01:01:12.000') every(1s) fill(prev);
_irowts | interp(v1) |
========================================
2023-08-01 01:01:01.000 | 1 |
2023-08-01 01:01:02.000 | 2 |
2023-08-01 01:01:03.000 | 3 |
2023-08-01 01:01:04.000 | 4 |
2023-08-01 01:01:05.000 | 5 |
2023-08-01 01:01:06.000 | 6 |
2023-08-01 01:01:07.000 | 7 |
2023-08-01 01:01:08.000 | 8 |
2023-08-01 01:01:09.000 | 9 |
2023-08-01 01:01:10.000 | 10 |
2023-08-01 01:01:11.000 | 10 |
2023-08-01 01:01:12.000 | 10 |
> select _irowts,interp(v1) from t7 range('2023-08-01 01:01:01.000','2023-08-01 01:01:12.000') every(1s) fill(next);
_irowts | interp(v1) |
========================================
2023-08-01 01:01:01.000 | 1 |
2023-08-01 01:01:02.000 | 2 |
2023-08-01 01:01:03.000 | 3 |
2023-08-01 01:01:04.000 | 4 |
2023-08-01 01:01:05.000 | 5 |
2023-08-01 01:01:06.000 | 6 |
2023-08-01 01:01:07.000 | 7 |
2023-08-01 01:01:08.000 | 8 |
2023-08-01 01:01:09.000 | 9 |
2023-08-01 01:01:10.000 | 10 |
> select _irowts,interp(v1) from t7 range('2023-08-01 01:01:01.000','2023-08-01 01:01:12.000') every(1s) fill(null);
_irowts | interp(v1) |
========================================
2023-08-01 01:01:01.000 | 1 |
2023-08-01 01:01:02.000 | 2 |
2023-08-01 01:01:03.000 | 3 |
2023-08-01 01:01:04.000 | 4 |
2023-08-01 01:01:05.000 | 5 |
2023-08-01 01:01:06.000 | 6 |
2023-08-01 01:01:07.000 | 7 |
2023-08-01 01:01:08.000 | 8 |
2023-08-01 01:01:09.000 | 9 |
2023-08-01 01:01:10.000 | 10 |
2023-08-01 01:01:11.000 | NULL |
2023-08-01 01:01:12.000 | NULL |
LAST
LAST(expr)
功能说明:统计表/超级表中某列的值最后写入的非 NULL 值。
返回数据类型:同应用的字段。
适用数据类型:所有字段。
适用于:表和超级表。
使用说明:
- 如果要返回各个列的最后(时间戳最大)一个非 NULL 值,可以使用 LAST(*);
- 如果结果集中的某列全部为 NULL 值,则该列的返回结果也是 NULL;如果结果集中所有列全部为 NULL 值,则不返回结果。
- 在用于超级表时,时间戳完全一样且同为最大的数据行可能有多个,那么会从中随机返回一条,而并不保证多次运行所挑选的数据行必然一致。
示例:
> select * from t7 ;
ts | v1 | v2 |
======================================================
2023-08-01 01:01:00.000 | NULL | NULL |
2023-08-01 01:01:01.000 | 1 | NULL |
2023-08-01 01:01:02.000 | 2 | NULL |
2023-08-01 01:01:03.000 | 3 | NULL |
2023-08-01 01:01:04.000 | 4 | NULL |
2023-08-01 01:01:05.000 | 5 | NULL |
2023-08-01 01:01:06.000 | 6 | NULL |
2023-08-01 01:01:07.000 | 7 | NULL |
2023-08-01 01:01:08.000 | 8 | NULL |
2023-08-01 01:01:09.000 | 9 | NULL |
2023-08-01 01:01:10.000 | 10 | NULL |
2023-08-01 01:01:11.000 | NULL | NULL |
> select last(*) from t7;
last(ts) | last(v1) | last(v2) |
======================================================
2023-08-01 01:01:11.000 | 10 | NULL |
> select ts,last(v1) from t7;
ts | last(v1) |
========================================
2023-08-01 01:01:10.000 | 10 |
taos> select ts,last(v2) from t7;
Query OK, 0 row(s) in set (0.001065s)
LAST_ROW
LAST_ROW(expr)
功能说明:返回表/超级表的最后一条记录。
返回数据类型:同应用的字段。
适用数据类型:所有字段。
适用于:表和超级表。
使用说明:
- 在用于超级表时,时间戳完全一样且同为最大的数据行可能有多个,那么会从中随机返回一条,而并不保证多次运行所挑选的数据行必然一致。
- 不能与 INTERVAL 一起使用。
示例:
> select * from t7;
ts | v1 | v2 |
======================================================
2023-08-01 01:01:00.000 | NULL | NULL |
2023-08-01 01:01:01.000 | 1 | NULL |
2023-08-01 01:01:02.000 | 2 | NULL |
2023-08-01 01:01:03.000 | 3 | NULL |
2023-08-01 01:01:04.000 | 4 | NULL |
2023-08-01 01:01:05.000 | 5 | NULL |
2023-08-01 01:01:06.000 | 6 | NULL |
2023-08-01 01:01:07.000 | 7 | NULL |
2023-08-01 01:01:08.000 | 8 | NULL |
2023-08-01 01:01:09.000 | 9 | NULL |
2023-08-01 01:01:10.000 | 10 | NULL |
2023-08-01 01:01:11.000 | NULL | NULL |
> select last_row(*) from t7;
last_row(ts) | last_row(v1) | last_row(v2) |
========================================================
2023-08-01 01:01:11.000 | NULL | NULL |
> select ts,last_row(v1) from t7;
ts | last_row(v1) |
=========================================
2023-08-01 01:01:11.000 | NULL |
> select ts,last_row(v2) from t7;
ts | last_row(v2) |
=========================================
2023-08-01 01:01:11.000 | NULL |
MAX
MAX(expr)
功能说明:统计表/超级表中某列的值最大值。
返回数据类型:同应用的字段。
适用数据类型:数值类型。
适用于:表和超级表。
示例:
> select * from t7;
ts | v1 | v2 |
======================================================
2023-08-01 01:01:00.000 | NULL | NULL |
2023-08-01 01:01:01.000 | 1 | NULL |
2023-08-01 01:01:02.000 | 2 | NULL |
2023-08-01 01:01:03.000 | 3 | NULL |
2023-08-01 01:01:04.000 | 4 | NULL |
2023-08-01 01:01:05.000 | 5 | NULL |
2023-08-01 01:01:06.000 | 6 | NULL |
2023-08-01 01:01:07.000 | 7 | NULL |
2023-08-01 01:01:08.000 | 8 | NULL |
2023-08-01 01:01:09.000 | 9 | NULL |
2023-08-01 01:01:10.000 | 10 | NULL |
2023-08-01 01:01:11.000 | NULL | NULL |
> select max(v1) from t7;
max(v1) |
==============
10 |
> select max(v2) from t7;
max(v2) |
==============
NULL |
MIN
MIN(expr)
功能说明:统计表/超级表中某列的值最小值。
返回数据类型:同应用的字段。
适用数据类型:数值类型。
适用于:表和超级表。
示例:
> select * from t7;
ts | v1 | v2 |
======================================================
2023-08-01 01:01:00.000 | NULL | NULL |
2023-08-01 01:01:01.000 | 1 | NULL |
2023-08-01 01:01:02.000 | 2 | NULL |
2023-08-01 01:01:03.000 | 3 | NULL |
2023-08-01 01:01:04.000 | 4 | NULL |
2023-08-01 01:01:05.000 | 5 | NULL |
2023-08-01 01:01:06.000 | 6 | NULL |
2023-08-01 01:01:07.000 | 7 | NULL |
2023-08-01 01:01:08.000 | 8 | NULL |
2023-08-01 01:01:09.000 | 9 | NULL |
2023-08-01 01:01:10.000 | 10 | NULL |
2023-08-01 01:01:11.000 | NULL | NULL |
> select min(v2) from t7;
min(v2) |
==============
NULL |
> select min(v1) from t7;
min(v1) |
==============
1 |
MODE
MODE(expr)
功能说明:返回出现频率最高的值,若存在多个频率相同的最高值,则随机输出其中某个值。
返回数据类型:与输入数据类型一致。
适用数据类型:全部类型字段。
适用于:表和超级表。
示例:
> select * from t7;
ts | v1 | v2 |
======================================================
2023-08-01 01:01:00.000 | NULL | NULL |
2023-08-01 01:01:01.000 | 1 | NULL |
2023-08-01 01:01:02.000 | 2 | NULL |
2023-08-01 01:01:03.000 | 3 | NULL |
2023-08-01 01:01:04.000 | 4 | NULL |
2023-08-01 01:01:05.000 | 5 | NULL |
2023-08-01 01:01:06.000 | 6 | NULL |
2023-08-01 01:01:07.000 | 7 | NULL |
2023-08-01 01:01:08.000 | 8 | NULL |
2023-08-01 01:01:09.000 | 9 | NULL |
2023-08-01 01:01:10.000 | 10 | NULL |
2023-08-01 01:01:11.000 | NULL | NULL |
2023-08-01 01:01:12.000 | 10 | NULL |
> select mode(v1) from t7;
mode(v1) |
==============
10 |
> select mode(v2) from t7;
mode(v2) |
==============
NULL |
SAMPLE
SAMPLE(expr, k)
功能说明: 获取数据的 k 个采样值。参数 k 的合法输入范围是 1≤ k ≤ 1000。
返回结果类型: 同原始数据类型。
适用数据类型: 全部类型字段。
嵌套子查询支持: 适用于内层查询和外层查询。
适用于:表和超级表。
示例:
> select count(*) from db03.meters;
count(*) |
========================
109847142 |
Query OK, 1 row(s) in set (2.897577s)
taos> select ts,sample(voltage,10) from db03.meters;
ts | sample(voltage,10) |
===============================================
2023-08-31 07:28:22.075 | 832 |
2023-08-31 07:44:24.141 | 843 |
2023-08-30 20:02:05.379 | 571 |
2023-08-31 07:39:37.149 | 64 |
2023-08-30 18:17:03.414 | 406 |
2023-08-31 01:08:33.140 | 48 |
2023-08-30 22:24:29.888 | 665 |
2023-08-31 03:09:20.970 | 317 |
2023-08-31 07:52:18.062 | 809 |
2023-08-30 23:26:56.370 | 951 |
> select ts,sample(current,10) from db03.meters;
ts | sample(current,10) |
=================================================
2017-07-14 10:40:04.333 | 9.9600000 |
2023-08-30 18:38:50.207 | 736.0000000 |
2023-08-31 04:04:39.806 | 48.0000000 |
2023-08-30 14:07:56.598 | 630.0000000 |
2017-07-14 10:40:08.386 | 9.8000002 |
2017-07-14 10:40:03.538 | 9.9200001 |
2023-08-31 07:30:39.249 | 894.0000000 |
2023-08-31 09:45:17.732 | 802.0000000 |
2023-08-30 23:24:46.770 | 794.0000000 |
2023-08-31 08:50:07.191 | 876.0000000 |
> select ts,sample(current,10),tbname from db03.meters;
ts | sample(current,10) | tbname |
============================================================================================
2023-08-30 16:46:31.089 | 320.0000000 | d320 |
2023-08-30 23:38:41.862 | 31.0000000 | d31 |
2023-08-31 05:31:04.926 | 251.0000000 | d251 |
2023-08-30 21:06:09.251 | 949.0000000 | d949 |
2023-08-31 05:58:59.459 | 455.0000000 | d455 |
2017-07-14 10:40:06.038 | 10.1199999 | d753 |
2023-08-31 07:10:25.396 | 878.0000000 | d878 |
2023-08-31 02:55:02.459 | 611.0000000 | d611 |
2023-08-30 18:21:05.591 | 124.0000000 | d124 |
2023-08-30 18:19:58.478 | 423.0000000 | d423 |
> select ts,sample(current,10),tbname from db03.meters;
ts | sample(current,10) | tbname |
============================================================================================
2023-08-30 16:57:54.242 | 198.0000000 | d198 |
2023-08-30 15:50:55.564 | 300.0000000 | d300 |
2023-08-30 20:23:59.571 | 190.0000000 | d190 |
2023-08-31 07:23:07.732 | 883.0000000 | d883 |
2023-08-30 21:00:09.487 | 671.0000000 | d671 |
2017-07-14 10:40:05.945 | 9.8000002 | d238 |
2023-08-31 07:23:04.833 | 809.0000000 | d809 |
2023-08-30 13:56:39.881 | 329.0000000 | d329 |
2023-08-31 04:08:36.008 | 534.0000000 | d534 |
2023-08-30 19:54:08.737 | 30.0000000 | d30
TAIL
TAIL(expr, k [, offset_rows])
功能说明:返回跳过最后 offset_val 个,然后取连续 k 个记录,不忽略 NULL 值。offset_val 可以不输入。此时返回最后的 k 个记录。当有 offset_val 输入的情况下,该函数功能等效于 order by ts desc LIMIT k OFFSET offset_val
。
参数范围:k: [1,100] offset_val: [0,100]。
返回数据类型:同应用的字段。
适用数据类型:适合于除时间主键列外的任何类型。
适用于:表、超级表。
示例:
> select ts,v1 from t7;
ts | v1 |
========================================
2023-08-01 01:01:00.000 | NULL |
2023-08-01 01:01:01.000 | 1 |
2023-08-01 01:01:02.000 | 2 |
2023-08-01 01:01:03.000 | 3 |
2023-08-01 01:01:04.000 | 4 |
2023-08-01 01:01:05.000 | 5 |
2023-08-01 01:01:06.000 | 6 |
2023-08-01 01:01:07.000 | 7 |
2023-08-01 01:01:08.000 | 8 |
2023-08-01 01:01:09.000 | 9 |
2023-08-01 01:01:10.000 | 10 |
2023-08-01 01:01:11.000 | NULL |
> select ts,tail(v1,2) from t7;
ts | tail(v1,2) |
========================================
2023-08-01 01:01:11.000 | NULL |
2023-08-01 01:01:10.000 | 10 |
> select ts,tail(v1,2,2) from t7;
ts | tail(v1,2,2) |
=========================================
2023-08-01 01:01:09.000 | 9 |
2023-08-01 01:01:08.000 | 8 |
TOP
TOP(expr, k)
功能说明: 统计表/超级表中某列的值最大 k 个非 NULL 值。如果多条数据取值一样,全部取用又会超出 k 条限制时,系统会从相同值中随机选取符合要求的数量返回。
返回数据类型:同应用的字段。
适用数据类型:数值类型。
适用于:表和超级表。
使用说明:
- k值取值范围 1≤k≤100;
- 系统同时返回该记录关联的时间戳列;
- 限制:TOP 函数不支持 FILL 子句。
示例:
> select ts,v1 from t7;
ts | v1 |
========================================
2023-08-01 01:01:00.000 | NULL |
2023-08-01 01:01:01.000 | 1 |
2023-08-01 01:01:02.000 | 2 |
2023-08-01 01:01:03.000 | 3 |
2023-08-01 01:01:04.000 | 4 |
2023-08-01 01:01:05.000 | 5 |
2023-08-01 01:01:06.000 | 6 |
2023-08-01 01:01:07.000 | 7 |
2023-08-01 01:01:08.000 | 8 |
2023-08-01 01:01:09.000 | 9 |
2023-08-01 01:01:10.000 | 10 |
2023-08-01 01:01:11.000 | NULL |
2023-08-01 01:01:12.000 | 10 |
> select ts,top(v1,3) from t7;
ts | top(v1,3) |
========================================
2023-08-01 01:01:09.000 | 9 |
2023-08-01 01:01:10.000 | 10 |
2023-08-01 01:01:12.000 | 10 |
UNIQUE
UNIQUE(expr)
功能说明:返回该列数据首次出现的值。该函数功能与 distinct 相似。
返回数据类型:同应用的字段。
适用数据类型:全部类型字段。
适用于: 表和超级表。文章来源:https://www.toymoban.com/news/detail-687784.html
示例:
s> select ts,v1 from t7;
ts | v1 |
========================================
2023-08-01 01:01:00.000 | NULL |
2023-08-01 01:01:01.000 | 1 |
2023-08-01 01:01:02.000 | 2 |
2023-08-01 01:01:03.000 | 3 |
2023-08-01 01:01:04.000 | 4 |
2023-08-01 01:01:05.000 | 5 |
2023-08-01 01:01:06.000 | 6 |
2023-08-01 01:01:07.000 | 7 |
2023-08-01 01:01:08.000 | 8 |
2023-08-01 01:01:09.000 | 9 |
2023-08-01 01:01:10.000 | 10 |
2023-08-01 01:01:11.000 | NULL |
2023-08-01 01:01:12.000 | 10 |
> select unique(v1) from t7;
unique(v1) |
==============
NULL |
7 |
6 |
4 |
2 |
5 |
9 |
1 |
10 |
8 |
3 |
到了这里,关于TDengine函数大全-选择函数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!