查询结果分页
当查询结果集数据量很大,放在一个页面不利于显示,可以使用 LIMIT/SLIMIT 子句和 OFFSET/SOFFSET 子句进行分页控制。
LIMIT和SLIMIT子句用于控制查询结果的行数和列数。OFFSET和SOFFSET子句用于控制结果显示的起始位置。
按行分页
用户可以通过 LIMIT 和 OFFSET 子句控制查询结果的行数,LIMIT rowLimit 指定查询结果的行数,OFFSET rowOffset 指定查询结果显示的起始行位置。
注意:
- 当
rowOffset超过结果集的大小时,返回空结果集。 - 当
rowLimit超过结果集的大小时,返回所有查询结果。 - 当
rowLimit和rowOffset不是正整数,或超过INT64允许的最大值时,系统将提示错误。
我们将通过以下示例演示如何使用 LIMIT 和 OFFSET 子句。
- 示例 1: 基本的
LIMIT子句
SQL 语句:
1. select status, temperature from root.ln.wf01.wt01 limit 10
含义:
所选设备为 ln 组 wf01 工厂 wt01 设备; 选择的时间序列是“状态”和“温度”。 SQL 语句要求返回查询结果的前 10 行。
结果如下所示:
1. +-----------------------------+------------------------+-----------------------------+
2. | Time|root.ln.wf01.wt01.status|root.ln.wf01.wt01.temperature|
3. +-----------------------------+------------------------+-----------------------------+
4. |2017-11-01T00:00:00.000+08:00| true| 25.96|
5. |2017-11-01T00:01:00.000+08:00| true| 24.36|
6. |2017-11-01T00:02:00.000+08:00| false| 20.09|
7. |2017-11-01T00:03:00.000+08:00| false| 20.18|
8. |2017-11-01T00:04:00.000+08:00| false| 21.13|
9. |2017-11-01T00:05:00.000+08:00| false| 22.72|
10. |2017-11-01T00:06:00.000+08:00| false| 20.71|
11. |2017-11-01T00:07:00.000+08:00| false| 21.45|
12. |2017-11-01T00:08:00.000+08:00| false| 22.58|
13. |2017-11-01T00:09:00.000+08:00| false| 20.98|
14. +-----------------------------+------------------------+-----------------------------+
15. Total line number = 10
16. It costs 0.000s
- 示例 2: 带
OFFSET的LIMIT子句
SQL 语句:
1. select status, temperature from root.ln.wf01.wt01 limit 5 offset 3
含义:
所选设备为 ln 组 wf01 工厂 wt01 设备; 选择的时间序列是“状态”和“温度”。 SQL 语句要求返回查询结果的第 3 至 7 行(第一行编号为 0 行)。
结果如下所示:
1. +-----------------------------+------------------------+-----------------------------+
2. | Time|root.ln.wf01.wt01.status|root.ln.wf01.wt01.temperature|
3. +-----------------------------+------------------------+-----------------------------+
4. |2017-11-01T00:03:00.000+08:00| false| 20.18|
5. |2017-11-01T00:04:00.000+08:00| false| 21.13|
6. |2017-11-01T00:05:00.000+08:00| false| 22.72|
7. |2017-11-01T00:06:00.000+08:00| false| 20.71|
8. |2017-11-01T00:07:00.000+08:00| false| 21.45|
9. +-----------------------------+------------------------+-----------------------------+
10. Total line number = 5
11. It costs 0.342s
- 示例 3:
LIMIT子句与WHERE子句结合
SQL 语句:
1. select status,temperature from root.ln.wf01.wt01 where time > 2017-11-01T00:05:00.000 and time< 2017-11-01T00:12:00.000 limit 5 offset 3
含义:
所选设备为 ln 组 wf01 工厂 wt01 设备; 选择的时间序列是“状态”和“温度”。 SQL 语句要求返回时间“ 2017-11-01T00:05:00.000”和“ 2017-11-01T00:12:00.000”之间的状态和温度传感器值的第 3 至 4 行(第一行) 编号为第 0 行)。
结果如下所示:
1. +-----------------------------+------------------------+-----------------------------+
2. | Time|root.ln.wf01.wt01.status|root.ln.wf01.wt01.temperature|
3. +-----------------------------+------------------------+-----------------------------+
4. |2017-11-01T00:03:00.000+08:00| false| 20.18|
5. |2017-11-01T00:04:00.000+08:00| false| 21.13|
6. |2017-11-01T00:05:00.000+08:00| false| 22.72|
7. |2017-11-01T00:06:00.000+08:00| false| 20.71|
8. |2017-11-01T00:07:00.000+08:00| false| 21.45|
9. +-----------------------------+------------------------+-----------------------------+
10. Total line number = 5
11. It costs 0.000s
- 示例 4:
LIMIT子句与GROUP BY子句组合
SQL 语句:
1. select count(status), max_value(temperature) from root.ln.wf01.wt01 group by ([2017-11-01T00:00:00, 2017-11-07T23:00:00),1d) limit 4 offset 3
含义:
SQL 语句子句要求返回查询结果的第 3 至 6 行(第一行编号为 0 行)。
结果如下所示:
1. +-----------------------------+-------------------------------+----------------------------------------+
2. | Time|count(root.ln.wf01.wt01.status)|max_value(root.ln.wf01.wt01.temperature)|
3. +-----------------------------+-------------------------------+----------------------------------------+
4. |2017-11-04T00:00:00.000+08:00| 1440| 26.0|
5. |2017-11-05T00:00:00.000+08:00| 1440| 26.0|
6. |2017-11-06T00:00:00.000+08:00| 1440| 25.99|
7. |2017-11-07T00:00:00.000+08:00| 1380| 26.0|
8. +-----------------------------+-------------------------------+----------------------------------------+
9. Total line number = 4
10. It costs 0.016s
按列分页
用户可以通过 SLIMIT 和 SOFFSET 子句控制查询结果的列数,SLIMIT seriesLimit 指定查询结果的列数,SOFFSET seriesOffset 指定查询结果显示的起始列位置。
注意:
- 仅用于控制值列,对时间列和设备列无效。
- 当
seriesOffset超过结果集的大小时,返回空结果集。 - 当
seriesLimit超过结果集的大小时,返回所有查询结果。 - 当
seriesLimit和seriesOffset不是正整数,或超过INT64允许的最大值时,系统将提示错误。
我们将通过以下示例演示如何使用 SLIMIT 和 SOFFSET 子句。
- 示例 1: 基本的
SLIMIT子句
SQL 语句:
1. select * from root.ln.wf01.wt01 where time > 2017-11-01T00:05:00.000 and time < 2017-11-01T00:12:00.000 slimit 1
含义:
所选设备为 ln 组 wf01 工厂 wt01 设备; 所选时间序列是该设备下的第二列,即温度。 SQL 语句要求在”2017-11-01T00:05:00.000”和”2017-11-01T00:12:00.000”的时间点之间选择温度传感器值。
结果如下所示:
1. +-----------------------------+-----------------------------+
2. | Time|root.ln.wf01.wt01.temperature|
3. +-----------------------------+-----------------------------+
4. |2017-11-01T00:06:00.000+08:00| 20.71|
5. |2017-11-01T00:07:00.000+08:00| 21.45|
6. |2017-11-01T00:08:00.000+08:00| 22.58|
7. |2017-11-01T00:09:00.000+08:00| 20.98|
8. |2017-11-01T00:10:00.000+08:00| 25.52|
9. |2017-11-01T00:11:00.000+08:00| 22.91|
10. +-----------------------------+-----------------------------+
11. Total line number = 6
12. It costs 0.000s
- 示例 2: 带
SOFFSET的SLIMIT子句
SQL 语句:
1. select * from root.ln.wf01.wt01 where time > 2017-11-01T00:05:00.000 and time < 2017-11-01T00:12:00.000 slimit 1 soffset 1
含义:
所选设备为 ln 组 wf01 工厂 wt01 设备; 所选时间序列是该设备下的第一列,即电源状态。 SQL 语句要求在” 2017-11-01T00:05:00.000”和”2017-11-01T00:12:00.000”的时间点之间选择状态传感器值。
结果如下所示:
1. +-----------------------------+------------------------+
2. | Time|root.ln.wf01.wt01.status|
3. +-----------------------------+------------------------+
4. |2017-11-01T00:06:00.000+08:00| false|
5. |2017-11-01T00:07:00.000+08:00| false|
6. |2017-11-01T00:08:00.000+08:00| false|
7. |2017-11-01T00:09:00.000+08:00| false|
8. |2017-11-01T00:10:00.000+08:00| true|
9. |2017-11-01T00:11:00.000+08:00| false|
10. +-----------------------------+------------------------+
11. Total line number = 6
12. It costs 0.003s
- 示例 3:
SLIMIT子句与GROUP BY子句结合
SQL 语句:
1. select max_value(*) from root.ln.wf01.wt01 group by ([2017-11-01T00:00:00, 2017-11-07T23:00:00),1d) slimit 1 soffset 1
含义:
1. +-----------------------------+-----------------------------------+
2. | Time|max_value(root.ln.wf01.wt01.status)|
3. +-----------------------------+-----------------------------------+
4. |2017-11-01T00:00:00.000+08:00| true|
5. |2017-11-02T00:00:00.000+08:00| true|
6. |2017-11-03T00:00:00.000+08:00| true|
7. |2017-11-04T00:00:00.000+08:00| true|
8. |2017-11-05T00:00:00.000+08:00| true|
9. |2017-11-06T00:00:00.000+08:00| true|
10. |2017-11-07T00:00:00.000+08:00| true|
11. +-----------------------------+-----------------------------------+
12. Total line number = 7
13. It costs 0.000s
- 示例 4:
SLIMIT子句与LIMIT子句结合
SQL 语句:
1. select * from root.ln.wf01.wt01 limit 10 offset 100 slimit 2 soffset 0
含义:
所选设备为 ln 组 wf01 工厂 wt01 设备; 所选时间序列是此设备下的第 0 列至第 1 列(第一列编号为第 0 列)。 SQL 语句子句要求返回查询结果的第 100 至 109 行(第一行编号为 0 行)。
结果如下所示:
1. +-----------------------------+-----------------------------+------------------------+
2. | Time|root.ln.wf01.wt01.temperature|root.ln.wf01.wt01.status|
3. +-----------------------------+-----------------------------+------------------------+
4. |2017-11-01T01:40:00.000+08:00| 21.19| false|
5. |2017-11-01T01:41:00.000+08:00| 22.79| false|
6. |2017-11-01T01:42:00.000+08:00| 22.98| false|
7. |2017-11-01T01:43:00.000+08:00| 21.52| false|
8. |2017-11-01T01:44:00.000+08:00| 23.45| true|
9. |2017-11-01T01:45:00.000+08:00| 24.06| true|
10. |2017-11-01T01:46:00.000+08:00| 22.6| false|
11. |2017-11-01T01:47:00.000+08:00| 23.78| true|
12. |2017-11-01T01:48:00.000+08:00| 24.72| true|
13. |2017-11-01T01:49:00.000+08:00| 24.68| true|
14. +-----------------------------+-----------------------------+------------------------+
15. Total line number = 10
16. It costs 0.009s
