数据查询

当前版本:v1.4, 更新时间:2019-10-18

目前PinusDB不支持子查询以及多表join,查询语法如下所示:

  1. SELECT {* | expr_list}
  2. FROM tabname
  3. WHERE condition
  4. ORDER BY tstamp {ASC | DESC}
  5. GROUP BY {devid | tstamp time}
  6. LIMIT {querycnt | offset,querycnt}

其中:WHERE 子句,ORDER BY 子句,GROUP BY子句,LIMIT 子句 为可选。

支持的聚合函数以及条件请参考第3章 基本组成

ORDER BY 子句与GROUP BY子句不能同时存在。

若不指定LIMIT 子句,默认查询前1000条,一次最多查询10000条。

若使用聚合函数,则每个聚合函数必须用AS对列定义一个别名。

下面以表 tab01 为示例:

  1. CREATE TABLE tab01
  2. (
  3. devid bigint,
  4. tstamp datetime,
  5. val01 bool,
  6. val02 bigint,
  7. val03 datetime,
  8. val04 double,
  9. val05 string,
  10. val06 blob
  11. )

查询设备1在2019年7月15日的1000条数据如下所示

  1. SELECT *
  2. FROM tab01
  3. WHERE devid=1 AND tstamp >= '2019-07-15 0:0:0'

  1. SELECT *
  2. FROM tab01
  3. WHERE devid=1 AND tstamp >= '2019-07-15 0:0:0'
  4. LIMIT 1000

查询设备1在2019年7月15日的1000条满足指定条件的数据

  1. SELECT *
  2. FROM tab01
  3. WHERE devid = 1 AND tstamp >= '2019-07-15 0:0:0'
  4. AND val01 = TRUE
  5. AND val02 > 350
  6. AND val05 LIKE 'test_%'

查询设备1在2019年7月15日的后1000条数据,按时间戳倒序

  1. SELECT *
  2. FROM tab01
  3. WHERE devid = 1
  4. AND tstamp >= '2019-07-15 0:0:0'
  5. AND tstamp < '2019-07-16 0:0:0'
  6. ORDER BY tstamp DESC
  7. LIMIT 1000

其他查询可以根据文档自行编写。

1. 设备聚合查询

PinusDB支持根据设备进行聚合查询。

例如:查询设备1 到 1000 最新的数据

  1. SELECT devid,
  2. LAST(tstamp) AS lst_tm,
  3. LAST(val01) AS lst_01,
  4. LAST(val02) AS lst_02,
  5. LAST(val03) AS lst_03,
  6. LAST(val04) AS lst_04,
  7. LAST(val05) AS lst_05,
  8. LAST(val06) AS lst_06
  9. FROM tab01
  10. WHERE devid >= 1 AND devid <= 1000
  11. GROUP BY devid

2. 时间聚合查询

PinusDB支持按时间聚合,时间单位为秒(s)、分钟(m)、小时(h)和天(d)。

例如,查询设备1 在2019-7-15 以小时为聚合val04的平均值:

  1. SELECT tstamp,
  2. AVG(val04) AS avg_04
  3. FROM tab01
  4. WHERE devid = 1 AND tstamp >= '2019-07-15 0:0:0'
  5. GROUP BY tstamp 1h
  6. LIMIT 24

按时间聚合时必须指定时间戳的开始时间。即上例中的

tstamp >= '2019-07-15 0:0:0' , 若不指定则查询报错。