| <!-- |
| |
| Licensed to the Apache Software Foundation (ASF) under one |
| or more contributor license agreements. See the NOTICE file |
| distributed with this work for additional information |
| regarding copyright ownership. The ASF licenses this file |
| to you under the Apache License, Version 2.0 (the |
| "License"); you may not use this file except in compliance |
| with the License. You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, |
| software distributed under the License is distributed on an |
| "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| KIND, either express or implied. See the License for the |
| specific language governing permissions and limitations |
| under the License. |
| |
| --> |
| |
| # ORDER BY Clause |
| |
| ## 1. Syntax Overview |
| |
| ```sql |
| ORDER BY sortItem (',' sortItem)* |
| |
| sortItem |
| : expression (ASC | DESC)? (NULLS (FIRST | LAST))? |
| ; |
| ``` |
| |
| ### 1.1 ORDER BY Clause |
| |
| - Used to sort the result set at the final stage of a query. Based on the specified sorting conditions, the rows in the query result can be arranged in ascending (ASC) or descending (DESC) order. |
| - Provides control over the sorting position of NULL values, allowing users to specify whether NULL values are placed at the beginning (NULLS FIRST) or the end (NULLS LAST) of the result. |
| - By default, `ASC NULLS LAST` is used, i.e., values are sorted in ascending order with NULL values placed last. The default sorting order can be changed by manually specifying other parameters. |
| - The ORDER BY clause is executed before the LIMIT or OFFSET clause. |
| - Since V2.0.11, the ORDER BY clause supports referencing aliases explicitly defined in the SELECT clause. When a name is directly referenced in ORDER BY, it is first resolved as a SELECT output alias; if multiple aliases with the same name exist in the SELECT list, an ambiguity error will be thrown when referencing that alias. |
| |
| ## 2. Sample Dataset |
| |
| The [Example Data page](../Reference/Sample-Data.md) provides SQL statements to construct table schemas and insert data. By downloading and executing these statements in the IoTDB CLI, you can import the data into IoTDB. This data can be used to test and run the example SQL queries included in this documentation, allowing you to reproduce the described results. |
| |
| #### Example 1: Query Data of the Past Hour Sorted by Time in Descending Order |
| |
| ```sql |
| SELECT * |
| FROM table1 |
| WHERE time >= 2024-11-27 00:00:00 and time <= 2024-11-29 00:00:00 |
| ORDER BY time DESC; |
| ``` |
| |
| Results: |
| |
| ```sql |
| +-----------------------------+------+--------+---------+--------+-----------+-----------+--------+------+-----------------------------+ |
| | time|region|plant_id|device_id|model_id|maintenance|temperature|humidity|status| modifytime| |
| +-----------------------------+------+--------+---------+--------+-----------+-----------+--------+------+-----------------------------+ |
| |2024-11-28T11:00:00.000+08:00| 上海| 3001| 100| C| 90| 88.0| 45.1| true|2024-11-28T11:00:12.000+08:00| |
| |2024-11-28T10:00:00.000+08:00| 上海| 3001| 100| C| 90| 85.0| 35.2| null|2024-11-28T10:00:11.000+08:00| |
| |2024-11-28T09:00:00.000+08:00| 上海| 3001| 100| C| 90| null| 40.9| true| null| |
| |2024-11-28T08:00:00.000+08:00| 上海| 3001| 100| C| 90| 85.0| null| null|2024-11-28T08:00:09.000+08:00| |
| |2024-11-27T16:44:00.000+08:00| 北京| 1001| 101| B| 180| null| null| false|2024-11-26T16:37:08.000+08:00| |
| |2024-11-27T16:43:00.000+08:00| 北京| 1001| 101| B| 180| null| null| false| null| |
| |2024-11-27T16:42:00.000+08:00| 北京| 1001| 101| B| 180| null| 35.2| false| null| |
| |2024-11-27T16:41:00.000+08:00| 北京| 1001| 101| B| 180| 85.0| null| null|2024-11-26T16:37:04.000+08:00| |
| |2024-11-27T16:40:00.000+08:00| 北京| 1001| 101| B| 180| 85.0| null| null|2024-11-26T16:37:03.000+08:00| |
| |2024-11-27T16:39:00.000+08:00| 北京| 1001| 101| B| 180| 85.0| 35.3| null| null| |
| |2024-11-27T16:38:00.000+08:00| 北京| 1001| 101| B| 180| null| 35.1| true|2024-11-26T16:37:01.000+08:00| |
| +-----------------------------+------+--------+---------+--------+-----------+-----------+--------+------+-----------------------------+ |
| Total line number = 11 |
| It costs 0.148s |
| ``` |
| |
| #### Example 2: Query Data of All Devices Sorted by device_id in Ascending Order and Time in Descending Order, with NULL temperature Displayed First |
| |
| ```sql |
| SELECT * |
| FROM table1 |
| WHERE time >= 2024-11-27 00:00:00 and time <= 2024-11-29 00:00:00 |
| ORDER BY temperature NULLS FIRST, time DESC; |
| ``` |
| |
| Results: |
| |
| ```sql |
| +-----------------------------+------+--------+---------+--------+-----------+-----------+--------+------+-----------------------------+ |
| | time|region|plant_id|device_id|model_id|maintenance|temperature|humidity|status| modifytime| |
| +-----------------------------+------+--------+---------+--------+-----------+-----------+--------+------+-----------------------------+ |
| |2024-11-28T09:00:00.000+08:00| 上海| 3001| 100| C| 90| null| 40.9| true| null| |
| |2024-11-27T16:44:00.000+08:00| 北京| 1001| 101| B| 180| null| null| false|2024-11-26T16:37:08.000+08:00| |
| |2024-11-27T16:43:00.000+08:00| 北京| 1001| 101| B| 180| null| null| false| null| |
| |2024-11-27T16:42:00.000+08:00| 北京| 1001| 101| B| 180| null| 35.2| false| null| |
| |2024-11-27T16:38:00.000+08:00| 北京| 1001| 101| B| 180| null| 35.1| true|2024-11-26T16:37:01.000+08:00| |
| |2024-11-28T10:00:00.000+08:00| 上海| 3001| 100| C| 90| 85.0| 35.2| null|2024-11-28T10:00:11.000+08:00| |
| |2024-11-28T08:00:00.000+08:00| 上海| 3001| 100| C| 90| 85.0| null| null|2024-11-28T08:00:09.000+08:00| |
| |2024-11-27T16:41:00.000+08:00| 北京| 1001| 101| B| 180| 85.0| null| null|2024-11-26T16:37:04.000+08:00| |
| |2024-11-27T16:40:00.000+08:00| 北京| 1001| 101| B| 180| 85.0| null| null|2024-11-26T16:37:03.000+08:00| |
| |2024-11-27T16:39:00.000+08:00| 北京| 1001| 101| B| 180| 85.0| 35.3| null| null| |
| |2024-11-28T11:00:00.000+08:00| 上海| 3001| 100| C| 90| 88.0| 45.1| true|2024-11-28T11:00:12.000+08:00| |
| +-----------------------------+------+--------+---------+--------+-----------+-----------+--------+------+-----------------------------+ |
| Total line number = 11 |
| It costs 0.060s |
| ``` |
| |
| #### Example 3: Query the Top 10 Rows with the Highest Temperature |
| |
| ```sql |
| SELECT * |
| FROM table1 |
| ORDER BY temperature DESC NULLS LAST |
| LIMIT 10; |
| ``` |
| |
| Results: |
| |
| ```sql |
| +-----------------------------+------+--------+---------+--------+-----------+-----------+--------+------+-----------------------------+ |
| | time|region|plant_id|device_id|model_id|maintenance|temperature|humidity|status| modifytime| |
| +-----------------------------+------+--------+---------+--------+-----------+-----------+--------+------+-----------------------------+ |
| |2024-11-30T09:30:00.000+08:00| 上海| 3002| 101| F| 360| 90.0| 35.2| true| null| |
| |2024-11-26T13:38:00.000+08:00| 北京| 1001| 100| A| 180| 90.0| 35.1| true|2024-11-26T13:38:25.000+08:00| |
| |2024-11-30T14:30:00.000+08:00| 上海| 3002| 101| F| 360| 90.0| 34.8| true|2024-11-30T14:30:17.000+08:00| |
| |2024-11-26T13:37:00.000+08:00| 北京| 1001| 100| A| 180| 90.0| 35.1| true|2024-11-26T13:37:34.000+08:00| |
| |2024-11-29T18:30:00.000+08:00| 上海| 3002| 100| E| 180| 90.0| 35.4| true|2024-11-29T18:30:15.000+08:00| |
| |2024-11-28T11:00:00.000+08:00| 上海| 3001| 100| C| 90| 88.0| 45.1| true|2024-11-28T11:00:12.000+08:00| |
| |2024-11-28T10:00:00.000+08:00| 上海| 3001| 100| C| 90| 85.0| 35.2| null|2024-11-28T10:00:11.000+08:00| |
| |2024-11-28T08:00:00.000+08:00| 上海| 3001| 100| C| 90| 85.0| null| null|2024-11-28T08:00:09.000+08:00| |
| |2024-11-29T10:00:00.000+08:00| 上海| 3001| 101| D| 360| 85.0| null| null|2024-11-29T10:00:13.000+08:00| |
| |2024-11-27T16:40:00.000+08:00| 北京| 1001| 101| B| 180| 85.0| null| null|2024-11-26T16:37:03.000+08:00| |
| +-----------------------------+------+--------+---------+--------+-----------+-----------+--------+------+-----------------------------+ |
| Total line number = 10 |
| It costs 0.069s |
| ``` |
| |
| #### Example 4: Aggregate by Time Bucket and Sort by Alias (via SELECT Alias) |
| |
| ```sql |
| SELECT date_bin(1h, time) AS hour_time, AVG(temperature) AS avg_temperature |
| FROM table1 |
| WHERE time >= 2024-11-27 00:00:00 and time <= 2024-11-30 00:00:00 |
| GROUP BY hour_time |
| ORDER BY hour_time; |
| ``` |
| |
| Results: |
| |
| ```sql |
| +-----------------------------+---------------+ |
| | hour_time|avg_temperature| |
| +-----------------------------+---------------+ |
| |2024-11-27T16:00:00.000+08:00| 85.0| |
| |2024-11-28T08:00:00.000+08:00| 85.0| |
| |2024-11-28T09:00:00.000+08:00| null| |
| |2024-11-28T10:00:00.000+08:00| 85.0| |
| |2024-11-28T11:00:00.000+08:00| 88.0| |
| |2024-11-29T10:00:00.000+08:00| 85.0| |
| |2024-11-29T11:00:00.000+08:00| null| |
| |2024-11-29T18:00:00.000+08:00| 90.0| |
| +-----------------------------+---------------+ |
| Total line number = 8 |
| It costs 0.079s |
| ``` |