我正在使用InfluxDB 1.4,这是我的任务
1) find the closet value for each IDs.
2) Do 1) for every hour
例如,
select id, value, time from myTable where time = '2018-08-14T00:00:00Z' group by id;
select id, value, time from myTable where time = '2018-08-14T01:00:00Z' group by id;
....
select id, value, time from myTable where time = '2018-08-14T23:00:00Z' group by id;
然后,某些ID在每个时间点都有价值,而另一些则没有。在这种情况下,我想获得给定时间'2018-08-14T14:00:00Z'最接近的行,例如'2018-08-14T14:00:01Z'或'2018-08-14T13:59: 59Z'
,我不想每小时查询24次。我可以使用按时间,id或其他方式进行分组吗?
答案 0 :(得分:0)
问::我想select
最接近小时边界的点数据。有没有一种方法可以不必每天查询24次呢? group by time
对此有帮助吗?
A:
group by time
会对此有所帮助吗?
不幸的是,group by time
函数对您的帮助不大,因为它需要查询具有聚合函数。 group by time
函数的作用是通过使用aggregation
,sum
等mean
函数将合并后的间隔内的所有数据分组为一条记录行的值。
有没有一种方法可以不必每次查询24次 天?
据我所知,我不认为influxdb 1.5
无法为该任务建立一个统一查询。我不确定1.6
中是否有东西。还没尝试过。
目前,我认为您今天最好的解决方案是建立一个使用time filter
,order by
和limit
函数的查询,例如
select * from uv where time >= '2018-08-18T14:00:00Z' and time < '2018-08-18T15:00:00Z' order by desc limit 1;
上面的查询表示您selecting
是下午2点到下午3点之间的所有点,然后按降序对其进行排序,但只返回您想要的第一行。
如果由于某种原因,您只能向influxdb发出1个HTTP请求,以获取特定日期的每小时数据。您可以使用;
分隔符将24个查询捆绑为一个大查询,并在1个事务中检索数据。例如
select * from uv where time >= '2018-08-18T14:00:00Z' and time < '2018-08-18T15:00:00Z' order by desc limit 1; select * from uv where time >= '2018-08-18T15:00:00Z' and time < '2018-08-18T16:00:00Z' order by desc limit 1; select * from uv where time >= '2018-08-18T16:00:00Z' and time < '2018-08-18T17:00:00Z' order by desc limit 1;
输出:
name: uv
time tag1 id value
---- -------- -- -----
1534603500000000000 apple uv 2
1534607100000000000 apple uv 1
1534610700000000000 apple uv 3.1