我在InfluxDB中有一些列有Ticker
和Price
的股票价格数据。例如:
Time Ticker Price
------ ------ ------
12:02 IBM 100.12
12:02 MSFT 50.15
12:03 IBM 100.15
12:04 MSFT 51.00
12:05 AMZN 200.00
我想提取每种股票的最新价格,即使它们可能在不同的时间。所以最终的选择应该是
Time Ticker Price
------ ------ ------
12:03 IBM 100.15
12:04 MSFT 51.00
12:05 AMZN 200.00
在常规SQL中,人们通常会这样做:
SELECT values.*
FROM (SELECT Ticker, MAX(Time) AS MaxTime
FROM StockHistory
GROUP BY Ticker) as keys
INNER JOIN StockHistory as values
ON keys.Ticker = values.Ticker
AND keys.MaxTime = values.Time
问题是,Influx似乎不支持INNER JOIN
或任何其他类型的加入。我刚刚开始学习它,对于时间序列db,这类问题必须是它最常用的问题之一。你怎么快速地做到这一点?
速度是我关注的问题,因为我正在查看表中大约5-15百万行,以及150,000种不同的代码(并非所有代码都是股票,我存储的工具很多)。
非常感谢。
PS如果重要,我将通过Python API访问Influx,并且可以在代码中进行此过滤,但是我更倾向于在数据库端进行过滤,以最大限度地减少网络上大量行的传输。 ..更新
我看到了this question about a left join,但它似乎已经过时了,我需要一个内在的时间,特别暗示的答案会得到支持......
可能的方法
这会有用吗?
SELECT LAST(Time), Price
FROM StockHistory
GROUP BY Ticker
如果是,那么在大桌子上的速度有多快(参见上面的测量结果)?