当前版本:v3.0, 更新时间:2020-09-16
目前PinusDB不支持子查询以及多表join,查询语法如下所示:
SELECT {* | expr_list} FROM tabname WHERE condition ORDER BY tstamp {ASC | DESC} GROUP BY {devid | tstamp time} LIMIT {querycnt | offset,querycnt}
其中:WHERE 子句,ORDER BY 子句,GROUP BY子句,LIMIT 子句 为可选。
支持的聚合函数以及条件请参考第3章 基本组成
ORDER BY 子句与GROUP BY子句不能同时存在。
若不指定LIMIT 子句,默认查询前1000条,一次最多查询10000条。
若使用聚合函数,则每个聚合函数必须用AS对列定义一个别名。
下面以表 tab01 为示例:
CREATE TABLE tab01 ( devid bigint, tstamp datetime, val01 bool, val02 bigint, val03 datetime, val04 double, val05 string, val06 blob )
查询设备1在2019年7月15日的1000条数据如下所示
SELECT * FROM tab01 WHERE devid=1 AND tstamp >= '2019-07-15 0:0:0'
或
SELECT * FROM tab01 WHERE devid=1 AND tstamp >= '2019-07-15 0:0:0' LIMIT 1000
查询设备1在2019年7月15日的1000条满足指定条件的数据
SELECT * FROM tab01 WHERE devid = 1 AND tstamp >= '2019-07-15 0:0:0' AND val01 = TRUE AND val02 > 350 AND val05 LIKE 'test_%'
查询设备1在2019年7月15日的后1000条数据,按时间戳倒序
SELECT * FROM tab01 WHERE devid = 1 AND tstamp >= '2019-07-15 0:0:0' AND tstamp < '2019-07-16 0:0:0' ORDER BY tstamp DESC LIMIT 1000
其他查询可以根据文档自行编写。
1. 设备聚合查询
PinusDB支持根据设备进行聚合查询。
例如:查询设备1 到 1000 最新的数据
SELECT devid, LAST(tstamp) AS lst_tm, LAST(val01) AS lst_01, LAST(val02) AS lst_02, LAST(val03) AS lst_03, LAST(val04) AS lst_04, LAST(val05) AS lst_05, LAST(val06) AS lst_06 FROM tab01 WHERE devid >= 1 AND devid <= 1000 GROUP BY devid
2. 时间聚合查询
PinusDB支持按时间聚合,时间单位为秒(s)、分钟(m)、小时(h)和天(d)或直接指定聚合的微秒数。
例如,查询设备1 在2019-7-15 以小时为聚合val04的平均值:
SELECT tstamp, AVG(val04) AS avg_04 FROM tab01 WHERE devid = 1 AND tstamp >= '2019-07-15 0:0:0' GROUP BY tstamp 1h LIMIT 24
按时间聚合时必须指定时间戳的开始时间。即上例中的
tstamp >= '2019-07-15 0:0:0' , 若不指定则查询报错。