我在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)
的查询将给出相同的结果。唯一的区别是没有分组依据的查询将具有值的实际时间戳,而分组依据查询将具有间隔的时间戳。
- 使用分组依据时的时间戳表示间隔的开始时间。由此,您可以计算结束时间是开始时间+间隔。要显示的时间戳在查询语言中不可配置。