Add count_time aggregation usage doc (#73)
diff --git a/src/UserGuide/Master/stage/Operators-Functions/Aggregation.md b/src/UserGuide/Master/stage/Operators-Functions/Aggregation.md index 332e2cd..201fa0b 100644 --- a/src/UserGuide/Master/stage/Operators-Functions/Aggregation.md +++ b/src/UserGuide/Master/stage/Operators-Functions/Aggregation.md
@@ -27,21 +27,23 @@ The aggregate functions supported by IoTDB are as follows: -| Function Name | Description | Allowed Input Series Data Types | Required Attributes | Output Series Data Type | -| ------------- | ------------------------------------------------------------ | ------------------------------- | ------------------------------------------------------------ | ----------------------------------- | -| SUM | Summation. | INT32 INT64 FLOAT DOUBLE | / | DOUBLE | -| COUNT | Counts the number of data points. | All data types | / | INT | -| AVG | Average. | INT32 INT64 FLOAT DOUBLE | / | DOUBLE | -| EXTREME | Finds the value with the largest absolute value. Returns a positive value if the maximum absolute value of positive and negative values is equal. | INT32 INT64 FLOAT DOUBLE | / | Consistent with the input data type | -| MAX_VALUE | Find the maximum value. | INT32 INT64 FLOAT DOUBLE | / | Consistent with the input data type | -| MIN_VALUE | Find the minimum value. | INT32 INT64 FLOAT DOUBLE | / | Consistent with the input data type | -| FIRST_VALUE | Find the value with the smallest timestamp. | All data types | / | Consistent with input data type | -| LAST_VALUE | Find the value with the largest timestamp. | All data types | / | Consistent with input data type | -| MAX_TIME | Find the maximum timestamp. | All data Types | / | Timestamp | -| MIN_TIME | Find the minimum timestamp. | All data Types | / | Timestamp | -| COUNT_IF | Find the number of data points that continuously meet a given condition and the number of data points that meet the condition (represented by keep) meet the specified threshold. | BOOLEAN | `[keep >=/>/=/!=/</<=]threshold`:The specified threshold or threshold condition, it is equivalent to `keep >= threshold` if `threshold` is used alone, type of `threshold` is `INT64` `ignoreNull`:Optional, default value is `true`;If the value is `true`, null values are ignored, it means that if there is a null value in the middle, the value is ignored without interrupting the continuity. If the value is `true`, null values are not ignored, it means that if there are null values in the middle, continuity will be broken | INT64 | -| TIME_DURATION | Find the difference between the timestamp of the largest non-null value and the timestamp of the smallest non-null value in a column | All data Types | / | INT64 | -| MODE | Find the mode. Note: 1.Having too many different values in the input series risks a memory exception; 2.If all the elements have the same number of occurrences, that is no Mode, return the value with earliest time; 3.If there are many Modes, return the Mode with earliest time. | All data Types | / | Consistent with the input data type | +| Function Name | Description | Allowed Input Series Data Types | Required Attributes | Output Series Data Type | +| ------------- | ------------------------------------------------------------ |-----------------------------------------------------| ------------------------------------------------------------ | ----------------------------------- | +| SUM | Summation. | INT32 INT64 FLOAT DOUBLE | / | DOUBLE | +| COUNT | Counts the number of data points. | All data types | / | INT | +| AVG | Average. | INT32 INT64 FLOAT DOUBLE | / | DOUBLE | +| EXTREME | Finds the value with the largest absolute value. Returns a positive value if the maximum absolute value of positive and negative values is equal. | INT32 INT64 FLOAT DOUBLE | / | Consistent with the input data type | +| MAX_VALUE | Find the maximum value. | INT32 INT64 FLOAT DOUBLE | / | Consistent with the input data type | +| MIN_VALUE | Find the minimum value. | INT32 INT64 FLOAT DOUBLE | / | Consistent with the input data type | +| FIRST_VALUE | Find the value with the smallest timestamp. | All data types | / | Consistent with input data type | +| LAST_VALUE | Find the value with the largest timestamp. | All data types | / | Consistent with input data type | +| MAX_TIME | Find the maximum timestamp. | All data Types | / | Timestamp | +| MIN_TIME | Find the minimum timestamp. | All data Types | / | Timestamp | +| COUNT_IF | Find the number of data points that continuously meet a given condition and the number of data points that meet the condition (represented by keep) meet the specified threshold. | BOOLEAN | `[keep >=/>/=/!=/</<=]threshold`:The specified threshold or threshold condition, it is equivalent to `keep >= threshold` if `threshold` is used alone, type of `threshold` is `INT64` `ignoreNull`:Optional, default value is `true`;If the value is `true`, null values are ignored, it means that if there is a null value in the middle, the value is ignored without interrupting the continuity. If the value is `true`, null values are not ignored, it means that if there are null values in the middle, continuity will be broken | INT64 | +| TIME_DURATION | Find the difference between the timestamp of the largest non-null value and the timestamp of the smallest non-null value in a column | All data Types | / | INT64 | +| MODE | Find the mode. Note: 1.Having too many different values in the input series risks a memory exception; 2.If all the elements have the same number of occurrences, that is no Mode, return the value with earliest time; 3.If there are many Modes, return the Mode with earliest time. | All data Types | / | Consistent with the input data type | +| COUNT_TIME | The number of timestamps in the query data set. When used with `align by device`, the result is the number of timestamps in the data set per device. | All data Types, the input parameter can only be `*` | / | INT64 | + ## COUNT @@ -179,4 +181,113 @@ | 1677570933| +----------------------------+ ``` -> Note: Returns 0 if there is only one data point, or null if the data point is null. \ No newline at end of file +> Note: Returns 0 if there is only one data point, or null if the data point is null. + +## COUNT_TIME +### Grammar +```sql + count_time(*) +``` +### Example +#### raw data +``` ++----------+-------------+-------------+-------------+-------------+ +| Time|root.db.d1.s1|root.db.d1.s2|root.db.d2.s1|root.db.d2.s2| ++----------+-------------+-------------+-------------+-------------+ +| 0| 0| null| null| 0| +| 1| null| 1| 1| null| +| 2| null| 2| 2| null| +| 4| 4| null| null| 4| +| 5| 5| 5| 5| 5| +| 7| null| 7| 7| null| +| 8| 8| 8| 8| 8| +| 9| null| 9| null| null| ++----------+-------------+-------------+-------------+-------------+ +``` +#### Insert sql +```sql +CREATE DATABASE root.db; +CREATE TIMESERIES root.db.d1.s1 WITH DATATYPE=INT32, ENCODING=PLAIN; +CREATE TIMESERIES root.db.d1.s2 WITH DATATYPE=INT32, ENCODING=PLAIN; +CREATE TIMESERIES root.db.d2.s1 WITH DATATYPE=INT32, ENCODING=PLAIN; +CREATE TIMESERIES root.db.d2.s2 WITH DATATYPE=INT32, ENCODING=PLAIN; +INSERT INTO root.db.d1(time, s1) VALUES(0, 0), (4,4), (5,5), (8,8); +INSERT INTO root.db.d1(time, s2) VALUES(1, 1), (2,2), (5,5), (7,7), (8,8), (9,9); +INSERT INTO root.db.d2(time, s1) VALUES(1, 1), (2,2), (5,5), (7,7), (8,8); +INSERT INTO root.db.d2(time, s2) VALUES(0, 0), (4,4), (5,5), (8,8); +``` + +Query-Example - 1: +```sql +select count_time(*) from root.db.** +``` + +Result +``` ++-------------+ +|count_time(*)| ++-------------+ +| 8| ++-------------+ +``` + +Query-Example - 2: +```sql +select count_time(*) from root.db.d1, root.db.d2 +``` + +Result +``` ++-------------+ +|count_time(*)| ++-------------+ +| 8| ++-------------+ +``` + +Query-Example - 3: +```sql +select count_time(*) from root.db.** group by([0, 10), 2ms) +``` + +Result +``` ++-----------------------------+-------------+ +| Time|count_time(*)| ++-----------------------------+-------------+ +|1970-01-01T08:00:00.000+08:00| 2| +|1970-01-01T08:00:00.002+08:00| 1| +|1970-01-01T08:00:00.004+08:00| 2| +|1970-01-01T08:00:00.006+08:00| 1| +|1970-01-01T08:00:00.008+08:00| 2| ++-----------------------------+-------------+ +``` + +Query-Example - 4: +```sql +select count_time(*) from root.db.** group by([0, 10), 2ms) align by device +``` + +Result +``` ++-----------------------------+----------+-------------+ +| Time| Device|count_time(*)| ++-----------------------------+----------+-------------+ +|1970-01-01T08:00:00.000+08:00|root.db.d1| 2| +|1970-01-01T08:00:00.002+08:00|root.db.d1| 1| +|1970-01-01T08:00:00.004+08:00|root.db.d1| 2| +|1970-01-01T08:00:00.006+08:00|root.db.d1| 1| +|1970-01-01T08:00:00.008+08:00|root.db.d1| 2| +|1970-01-01T08:00:00.000+08:00|root.db.d2| 2| +|1970-01-01T08:00:00.002+08:00|root.db.d2| 1| +|1970-01-01T08:00:00.004+08:00|root.db.d2| 2| +|1970-01-01T08:00:00.006+08:00|root.db.d2| 1| +|1970-01-01T08:00:00.008+08:00|root.db.d2| 1| ++-----------------------------+----------+-------------+ +``` + +> Note: +> 1. The parameter in count_time can only be *. +> 2. Count_time aggregation cannot be used with other aggregation functions. +> 3. Count_time aggregation used with having statement is not supported, and count_time aggregation can not appear in the having statement. +> 4. Count_time does not support use with group by level, group by tag. \ No newline at end of file
diff --git a/src/UserGuide/V1.2.x/stage/Operators-Functions/Aggregation.md b/src/UserGuide/V1.2.x/stage/Operators-Functions/Aggregation.md index 332e2cd..385aefc 100644 --- a/src/UserGuide/V1.2.x/stage/Operators-Functions/Aggregation.md +++ b/src/UserGuide/V1.2.x/stage/Operators-Functions/Aggregation.md
@@ -27,21 +27,23 @@ The aggregate functions supported by IoTDB are as follows: -| Function Name | Description | Allowed Input Series Data Types | Required Attributes | Output Series Data Type | -| ------------- | ------------------------------------------------------------ | ------------------------------- | ------------------------------------------------------------ | ----------------------------------- | -| SUM | Summation. | INT32 INT64 FLOAT DOUBLE | / | DOUBLE | -| COUNT | Counts the number of data points. | All data types | / | INT | -| AVG | Average. | INT32 INT64 FLOAT DOUBLE | / | DOUBLE | -| EXTREME | Finds the value with the largest absolute value. Returns a positive value if the maximum absolute value of positive and negative values is equal. | INT32 INT64 FLOAT DOUBLE | / | Consistent with the input data type | -| MAX_VALUE | Find the maximum value. | INT32 INT64 FLOAT DOUBLE | / | Consistent with the input data type | -| MIN_VALUE | Find the minimum value. | INT32 INT64 FLOAT DOUBLE | / | Consistent with the input data type | -| FIRST_VALUE | Find the value with the smallest timestamp. | All data types | / | Consistent with input data type | -| LAST_VALUE | Find the value with the largest timestamp. | All data types | / | Consistent with input data type | -| MAX_TIME | Find the maximum timestamp. | All data Types | / | Timestamp | -| MIN_TIME | Find the minimum timestamp. | All data Types | / | Timestamp | -| COUNT_IF | Find the number of data points that continuously meet a given condition and the number of data points that meet the condition (represented by keep) meet the specified threshold. | BOOLEAN | `[keep >=/>/=/!=/</<=]threshold`:The specified threshold or threshold condition, it is equivalent to `keep >= threshold` if `threshold` is used alone, type of `threshold` is `INT64` `ignoreNull`:Optional, default value is `true`;If the value is `true`, null values are ignored, it means that if there is a null value in the middle, the value is ignored without interrupting the continuity. If the value is `true`, null values are not ignored, it means that if there are null values in the middle, continuity will be broken | INT64 | -| TIME_DURATION | Find the difference between the timestamp of the largest non-null value and the timestamp of the smallest non-null value in a column | All data Types | / | INT64 | -| MODE | Find the mode. Note: 1.Having too many different values in the input series risks a memory exception; 2.If all the elements have the same number of occurrences, that is no Mode, return the value with earliest time; 3.If there are many Modes, return the Mode with earliest time. | All data Types | / | Consistent with the input data type | +| Function Name | Description | Allowed Input Series Data Types | Required Attributes | Output Series Data Type | +| ------------- |------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------| +| SUM | Summation. | INT32 INT64 FLOAT DOUBLE | / | DOUBLE | +| COUNT | Counts the number of data points. | All data types | / | INT | +| AVG | Average. | INT32 INT64 FLOAT DOUBLE | / | DOUBLE | +| EXTREME | Finds the value with the largest absolute value. Returns a positive value if the maximum absolute value of positive and negative values is equal. | INT32 INT64 FLOAT DOUBLE | / | Consistent with the input data type | +| MAX_VALUE | Find the maximum value. | INT32 INT64 FLOAT DOUBLE | / | Consistent with the input data type | +| MIN_VALUE | Find the minimum value. | INT32 INT64 FLOAT DOUBLE | / | Consistent with the input data type | +| FIRST_VALUE | Find the value with the smallest timestamp. | All data types | / | Consistent with input data type | +| LAST_VALUE | Find the value with the largest timestamp. | All data types | / | Consistent with input data type | +| MAX_TIME | Find the maximum timestamp. | All data Types | / | Timestamp | +| MIN_TIME | Find the minimum timestamp. | All data Types | / | Timestamp | +| COUNT_IF | Find the number of data points that continuously meet a given condition and the number of data points that meet the condition (represented by keep) meet the specified threshold. | BOOLEAN | `[keep >=/>/=/!=/</<=]threshold`:The specified threshold or threshold condition, it is equivalent to `keep >= threshold` if `threshold` is used alone, type of `threshold` is `INT64` `ignoreNull`:Optional, default value is `true`;If the value is `true`, null values are ignored, it means that if there is a null value in the middle, the value is ignored without interrupting the continuity. If the value is `true`, null values are not ignored, it means that if there are null values in the middle, continuity will be broken | INT64 | +| TIME_DURATION | Find the difference between the timestamp of the largest non-null value and the timestamp of the smallest non-null value in a column | All data Types | / | INT64 | +| MODE | Find the mode. Note: 1.Having too many different values in the input series risks a memory exception; 2.If all the elements have the same number of occurrences, that is no Mode, return the value with earliest time; 3.If there are many Modes, return the Mode with earliest time. | All data Types | / | Consistent with the input data type | +| COUNT_TIME | The number of timestamps in the query data set. When used with `align by device`, the result is the number of timestamps in the data set per device. | All data Types, the input parameter can only be `*` | / | INT64 | + ## COUNT @@ -179,4 +181,113 @@ | 1677570933| +----------------------------+ ``` -> Note: Returns 0 if there is only one data point, or null if the data point is null. \ No newline at end of file +> Note: Returns 0 if there is only one data point, or null if the data point is null. + +## COUNT_TIME +### Grammar +```sql + count_time(*) +``` +### Example +#### raw data +``` ++----------+-------------+-------------+-------------+-------------+ +| Time|root.db.d1.s1|root.db.d1.s2|root.db.d2.s1|root.db.d2.s2| ++----------+-------------+-------------+-------------+-------------+ +| 0| 0| null| null| 0| +| 1| null| 1| 1| null| +| 2| null| 2| 2| null| +| 4| 4| null| null| 4| +| 5| 5| 5| 5| 5| +| 7| null| 7| 7| null| +| 8| 8| 8| 8| 8| +| 9| null| 9| null| null| ++----------+-------------+-------------+-------------+-------------+ +``` +#### Insert sql +```sql +CREATE DATABASE root.db; +CREATE TIMESERIES root.db.d1.s1 WITH DATATYPE=INT32, ENCODING=PLAIN; +CREATE TIMESERIES root.db.d1.s2 WITH DATATYPE=INT32, ENCODING=PLAIN; +CREATE TIMESERIES root.db.d2.s1 WITH DATATYPE=INT32, ENCODING=PLAIN; +CREATE TIMESERIES root.db.d2.s2 WITH DATATYPE=INT32, ENCODING=PLAIN; +INSERT INTO root.db.d1(time, s1) VALUES(0, 0), (4,4), (5,5), (8,8); +INSERT INTO root.db.d1(time, s2) VALUES(1, 1), (2,2), (5,5), (7,7), (8,8), (9,9); +INSERT INTO root.db.d2(time, s1) VALUES(1, 1), (2,2), (5,5), (7,7), (8,8); +INSERT INTO root.db.d2(time, s2) VALUES(0, 0), (4,4), (5,5), (8,8); +``` + +Query-Example - 1: +```sql +select count_time(*) from root.db.** +``` + +Result +``` ++-------------+ +|count_time(*)| ++-------------+ +| 8| ++-------------+ +``` + +Query-Example - 2: +```sql +select count_time(*) from root.db.d1, root.db.d2 +``` + +Result +``` ++-------------+ +|count_time(*)| ++-------------+ +| 8| ++-------------+ +``` + +Query-Example - 3: +```sql +select count_time(*) from root.db.** group by([0, 10), 2ms) +``` + +Result +``` ++-----------------------------+-------------+ +| Time|count_time(*)| ++-----------------------------+-------------+ +|1970-01-01T08:00:00.000+08:00| 2| +|1970-01-01T08:00:00.002+08:00| 1| +|1970-01-01T08:00:00.004+08:00| 2| +|1970-01-01T08:00:00.006+08:00| 1| +|1970-01-01T08:00:00.008+08:00| 2| ++-----------------------------+-------------+ +``` + +Query-Example - 4: +```sql +select count_time(*) from root.db.** group by([0, 10), 2ms) align by device +``` + +Result +``` ++-----------------------------+----------+-------------+ +| Time| Device|count_time(*)| ++-----------------------------+----------+-------------+ +|1970-01-01T08:00:00.000+08:00|root.db.d1| 2| +|1970-01-01T08:00:00.002+08:00|root.db.d1| 1| +|1970-01-01T08:00:00.004+08:00|root.db.d1| 2| +|1970-01-01T08:00:00.006+08:00|root.db.d1| 1| +|1970-01-01T08:00:00.008+08:00|root.db.d1| 2| +|1970-01-01T08:00:00.000+08:00|root.db.d2| 2| +|1970-01-01T08:00:00.002+08:00|root.db.d2| 1| +|1970-01-01T08:00:00.004+08:00|root.db.d2| 2| +|1970-01-01T08:00:00.006+08:00|root.db.d2| 1| +|1970-01-01T08:00:00.008+08:00|root.db.d2| 1| ++-----------------------------+----------+-------------+ +``` + +> Note: +> 1. The parameter in count_time can only be *. +> 2. Count_time aggregation cannot be used with other aggregation functions. +> 3. Count_time aggregation used with having statement is not supported, and count_time aggregation can not appear in the having statement. +> 4. Count_time does not support use with group by level, group by tag. \ No newline at end of file
diff --git a/src/zh/UserGuide/Master/stage/Operators-Functions/Aggregation.md b/src/zh/UserGuide/Master/stage/Operators-Functions/Aggregation.md index 5c689b6..7d4366e 100644 --- a/src/zh/UserGuide/Master/stage/Operators-Functions/Aggregation.md +++ b/src/zh/UserGuide/Master/stage/Operators-Functions/Aggregation.md
@@ -40,8 +40,11 @@ | MAX_TIME | 求最大时间戳。 | 所有类型 | 无 | Timestamp | | MIN_TIME | 求最小时间戳。 | 所有类型 | 无 | Timestamp | | COUNT_IF | 求数据点连续满足某一给定条件,且满足条件的数据点个数(用keep表示)满足指定阈值的次数。 | BOOLEAN | `[keep >=/>/=/!=/</<=]threshold`:被指定的阈值或阈值条件,若只使用`threshold`则等价于`keep >= threshold`,`threshold`类型为`INT64` <br> `ignoreNull`:可选,默认为`true`;为`true`表示忽略null值,即如果中间出现null值,直接忽略,不会打断连续性;为`false`表示不忽略null值,即如果中间出现null值,会打断连续性 | INT64 | -| TIME_DURATION | 求某一列最大一个不为NULL的值所在时间戳与最小一个不为NULL的值所在时间戳的时间戳差 | 所有类型 | 无 | INT64 | -| MODE | 求众数。注意:<br>1.输入序列的不同值个数过多时会有内存异常风险; <br>2.如果所有元素出现的频次相同,即没有众数,则返回对应时间戳最小的值; <br>3.如果有多个众数,则返回对应时间戳最小的众数。 | 所有类型 | 无 | 与输入类型一致 | +| TIME_DURATION | 求某一列最大一个不为NULL的值所在时间戳与最小一个不为NULL的值所在时间戳的时间戳差 | 所有类型 | 无 | INT64 | +| MODE | 求众数。注意:<br>1.输入序列的不同值个数过多时会有内存异常风险; <br>2.如果所有元素出现的频次相同,即没有众数,则返回对应时间戳最小的值; <br>3.如果有多个众数,则返回对应时间戳最小的众数。 | 所有类型 | 无 | 与输入类型一致 | +| COUNT_TIME | 查询结果集的时间戳的数量。与 align by device 搭配使用时,得到的结果是每个设备的结果集的时间戳的数量。 | 所有类型,输入参数只能为* | 无 | INT64 | + + ## COUNT_IF ### 语法 @@ -160,3 +163,113 @@ +----------------------------+ ``` > 注:若数据点只有一个,则返回0,若数据点为null,则返回null。 + +## COUNT_TIME +### 语法 +```sql + count_time(*) +``` +### 使用示例 +#### 准备数据 +``` ++----------+-------------+-------------+-------------+-------------+ +| Time|root.db.d1.s1|root.db.d1.s2|root.db.d2.s1|root.db.d2.s2| ++----------+-------------+-------------+-------------+-------------+ +| 0| 0| null| null| 0| +| 1| null| 1| 1| null| +| 2| null| 2| 2| null| +| 4| 4| null| null| 4| +| 5| 5| 5| 5| 5| +| 7| null| 7| 7| null| +| 8| 8| 8| 8| 8| +| 9| null| 9| null| null| ++----------+-------------+-------------+-------------+-------------+ +``` +#### 写入语句 +```sql +CREATE DATABASE root.db; +CREATE TIMESERIES root.db.d1.s1 WITH DATATYPE=INT32, ENCODING=PLAIN; +CREATE TIMESERIES root.db.d1.s2 WITH DATATYPE=INT32, ENCODING=PLAIN; +CREATE TIMESERIES root.db.d2.s1 WITH DATATYPE=INT32, ENCODING=PLAIN; +CREATE TIMESERIES root.db.d2.s2 WITH DATATYPE=INT32, ENCODING=PLAIN; +INSERT INTO root.db.d1(time, s1) VALUES(0, 0), (4,4), (5,5), (8,8); +INSERT INTO root.db.d1(time, s2) VALUES(1, 1), (2,2), (5,5), (7,7), (8,8), (9,9); +INSERT INTO root.db.d2(time, s1) VALUES(1, 1), (2,2), (5,5), (7,7), (8,8); +INSERT INTO root.db.d2(time, s2) VALUES(0, 0), (4,4), (5,5), (8,8); +``` + +查询示例1: +```sql +select count_time(*) from root.db.** +``` + +输出 +``` ++-------------+ +|count_time(*)| ++-------------+ +| 8| ++-------------+ +``` + +查询示例2: +```sql +select count_time(*) from root.db.d1, root.db.d2 +``` + +输出 +``` ++-------------+ +|count_time(*)| ++-------------+ +| 8| ++-------------+ +``` + +查询示例3: +```sql +select count_time(*) from root.db.** group by([0, 10), 2ms) +``` + +输出 +``` ++-----------------------------+-------------+ +| Time|count_time(*)| ++-----------------------------+-------------+ +|1970-01-01T08:00:00.000+08:00| 2| +|1970-01-01T08:00:00.002+08:00| 1| +|1970-01-01T08:00:00.004+08:00| 2| +|1970-01-01T08:00:00.006+08:00| 1| +|1970-01-01T08:00:00.008+08:00| 2| ++-----------------------------+-------------+ +``` + +查询示例4: +```sql +select count_time(*) from root.db.** group by([0, 10), 2ms) align by device +``` + +输出 +``` ++-----------------------------+----------+-------------+ +| Time| Device|count_time(*)| ++-----------------------------+----------+-------------+ +|1970-01-01T08:00:00.000+08:00|root.db.d1| 2| +|1970-01-01T08:00:00.002+08:00|root.db.d1| 1| +|1970-01-01T08:00:00.004+08:00|root.db.d1| 2| +|1970-01-01T08:00:00.006+08:00|root.db.d1| 1| +|1970-01-01T08:00:00.008+08:00|root.db.d1| 2| +|1970-01-01T08:00:00.000+08:00|root.db.d2| 2| +|1970-01-01T08:00:00.002+08:00|root.db.d2| 1| +|1970-01-01T08:00:00.004+08:00|root.db.d2| 2| +|1970-01-01T08:00:00.006+08:00|root.db.d2| 1| +|1970-01-01T08:00:00.008+08:00|root.db.d2| 1| ++-----------------------------+----------+-------------+ + +``` + +> 注: +> 1. count_time里的表达式只能为*。 +> 2. count_time不能和其他的聚合函数一起使用。 +> 3. having语句里不支持使用count_time, 使用count_time聚合函数时不支持使用having语句。 +> 4. count_time不支持与group by level, group by tag一起使用。
diff --git a/src/zh/UserGuide/V1.2.x/stage/Operators-Functions/Aggregation.md b/src/zh/UserGuide/V1.2.x/stage/Operators-Functions/Aggregation.md index 5c689b6..dcf3def 100644 --- a/src/zh/UserGuide/V1.2.x/stage/Operators-Functions/Aggregation.md +++ b/src/zh/UserGuide/V1.2.x/stage/Operators-Functions/Aggregation.md
@@ -42,6 +42,9 @@ | COUNT_IF | 求数据点连续满足某一给定条件,且满足条件的数据点个数(用keep表示)满足指定阈值的次数。 | BOOLEAN | `[keep >=/>/=/!=/</<=]threshold`:被指定的阈值或阈值条件,若只使用`threshold`则等价于`keep >= threshold`,`threshold`类型为`INT64` <br> `ignoreNull`:可选,默认为`true`;为`true`表示忽略null值,即如果中间出现null值,直接忽略,不会打断连续性;为`false`表示不忽略null值,即如果中间出现null值,会打断连续性 | INT64 | | TIME_DURATION | 求某一列最大一个不为NULL的值所在时间戳与最小一个不为NULL的值所在时间戳的时间戳差 | 所有类型 | 无 | INT64 | | MODE | 求众数。注意:<br>1.输入序列的不同值个数过多时会有内存异常风险; <br>2.如果所有元素出现的频次相同,即没有众数,则返回对应时间戳最小的值; <br>3.如果有多个众数,则返回对应时间戳最小的众数。 | 所有类型 | 无 | 与输入类型一致 | +| COUNT_TIME | 查询结果集的时间戳的数量。与 align by device 搭配使用时,得到的结果是每个设备的结果集的时间戳的数量。 | 所有类型,输入参数只能为* | 无 | INT64 | + + ## COUNT_IF ### 语法 @@ -160,3 +163,113 @@ +----------------------------+ ``` > 注:若数据点只有一个,则返回0,若数据点为null,则返回null。 + +## COUNT_TIME +### 语法 +```sql + count_time(*) +``` +### 使用示例 +#### 准备数据 +``` ++----------+-------------+-------------+-------------+-------------+ +| Time|root.db.d1.s1|root.db.d1.s2|root.db.d2.s1|root.db.d2.s2| ++----------+-------------+-------------+-------------+-------------+ +| 0| 0| null| null| 0| +| 1| null| 1| 1| null| +| 2| null| 2| 2| null| +| 4| 4| null| null| 4| +| 5| 5| 5| 5| 5| +| 7| null| 7| 7| null| +| 8| 8| 8| 8| 8| +| 9| null| 9| null| null| ++----------+-------------+-------------+-------------+-------------+ +``` +#### 写入语句 +```sql +CREATE DATABASE root.db; +CREATE TIMESERIES root.db.d1.s1 WITH DATATYPE=INT32, ENCODING=PLAIN; +CREATE TIMESERIES root.db.d1.s2 WITH DATATYPE=INT32, ENCODING=PLAIN; +CREATE TIMESERIES root.db.d2.s1 WITH DATATYPE=INT32, ENCODING=PLAIN; +CREATE TIMESERIES root.db.d2.s2 WITH DATATYPE=INT32, ENCODING=PLAIN; +INSERT INTO root.db.d1(time, s1) VALUES(0, 0), (4,4), (5,5), (8,8); +INSERT INTO root.db.d1(time, s2) VALUES(1, 1), (2,2), (5,5), (7,7), (8,8), (9,9); +INSERT INTO root.db.d2(time, s1) VALUES(1, 1), (2,2), (5,5), (7,7), (8,8); +INSERT INTO root.db.d2(time, s2) VALUES(0, 0), (4,4), (5,5), (8,8); +``` + +查询示例1: +```sql +select count_time(*) from root.db.** +``` + +输出 +``` ++-------------+ +|count_time(*)| ++-------------+ +| 8| ++-------------+ +``` + +查询示例2: +```sql +select count_time(*) from root.db.d1, root.db.d2 +``` + +输出 +``` ++-------------+ +|count_time(*)| ++-------------+ +| 8| ++-------------+ +``` + +查询示例3: +```sql +select count_time(*) from root.db.** group by([0, 10), 2ms) +``` + +输出 +``` ++-----------------------------+-------------+ +| Time|count_time(*)| ++-----------------------------+-------------+ +|1970-01-01T08:00:00.000+08:00| 2| +|1970-01-01T08:00:00.002+08:00| 1| +|1970-01-01T08:00:00.004+08:00| 2| +|1970-01-01T08:00:00.006+08:00| 1| +|1970-01-01T08:00:00.008+08:00| 2| ++-----------------------------+-------------+ +``` + +查询示例4: +```sql +select count_time(*) from root.db.** group by([0, 10), 2ms) align by device +``` + +输出 +``` ++-----------------------------+----------+-------------+ +| Time| Device|count_time(*)| ++-----------------------------+----------+-------------+ +|1970-01-01T08:00:00.000+08:00|root.db.d1| 2| +|1970-01-01T08:00:00.002+08:00|root.db.d1| 1| +|1970-01-01T08:00:00.004+08:00|root.db.d1| 2| +|1970-01-01T08:00:00.006+08:00|root.db.d1| 1| +|1970-01-01T08:00:00.008+08:00|root.db.d1| 2| +|1970-01-01T08:00:00.000+08:00|root.db.d2| 2| +|1970-01-01T08:00:00.002+08:00|root.db.d2| 1| +|1970-01-01T08:00:00.004+08:00|root.db.d2| 2| +|1970-01-01T08:00:00.006+08:00|root.db.d2| 1| +|1970-01-01T08:00:00.008+08:00|root.db.d2| 1| ++-----------------------------+----------+-------------+ + +``` + +> 注: +> 1. count_time里的表达式只能为*。 +> 2. count_time不能和其他的聚合函数一起使用。 +> 3. having语句里不支持使用count_time, 使用count_time聚合函数时不支持使用having语句。 +> 4. count_time不支持与group by level, group by tag一起使用。