我在 InfluxDB 中有一个数据库,其中包含以纳秒为单位的价格和时间戳。当我像这样按时间分组进行选择时:
select first(price),last(price) from priceseries where time>=1496815212834974866 and time<=1496865599580302882 group by time(1s)
我收到一个时间列,其中时间戳与组开头的第二个对齐。例如,时间戳为 08:00:00,下一个时间戳为 08:00:01
如何
- 对记录时间戳本身应用聚合函数,例如最后(时间)或第一次(时间),以便获得该组的真实第一个和最后一个时间戳(我可以在我的组中拥有许多价格)?
- 以及响应中的
time
列如何可能是结束秒而不是开始秒,也就是说,如果该组从 08:00:00 到 08:00:01,我想要在我的time
列中看到 08:00:01 而不是我现在看到的 08:00:00 ?
最佳答案
- 使用聚合函数时不适用,这意味着使用
group by
。
select first(price), last(price) where time >= <..> and time <= <..>
将为您提供该时间窗口内的第一个和最后一个价格。
当查询具有分组依据时,聚合仅适用于间隔内的值。这些值本身是 08:00:00 - 08:00:01 间隔内的实际值,只是显示的时间戳是间隔本身的时间戳,而不是实际值。
这意味着在 08:00:00 和 08:00:01 之间不带分组依据的查询和带有分组依据 time(1s)
的查询同一时期将给出相同的结果。唯一的区别是没有 group by 的查询将具有值的实际时间戳,而 group by 查询将具有间隔的时间戳。
- 使用group by时的时间戳表示间隔的开始时间。由此,您可以计算出结束时间是开始时间+间隔。要显示的时间戳在查询语言中是不可配置的。
关于select - 在 Influxdb 中按时间查询获取组中的最后一个时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44584071/