如何为每个组选择最接近给定时间的数据

时间:2018-08-17 14:26:14

标签: go influxdb

我正在使用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或其他方式进行分组吗?

1 个答案:

答案 0 :(得分:0)

问::我想select最接近小时边界的点数据。有没有一种方法可以不必每天查询24次呢? group by time对此有帮助吗?

A:

  

group by time会对此有所帮助吗?

不幸的是,group by time函数对您的帮助不大,因为它需要查询具有聚合函数。 group by time函数的作用是通过使用aggregationsummean函数将合并后的间隔内的所有数据分组为一条记录行的值。

  

有没有一种方法可以不必每次查询24次   天?

据我所知,我不认为influxdb 1.5无法为该任务建立一个统一查询。我不确定1.6中是否有东西。还没尝试过。

目前,我认为您今天最好的解决方案是建立一个使用time filterorder bylimit函数的查询,例如

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