我在 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
或任何其他类型的加入。我刚刚开始学习它,对于时间序列数据库,这种类型的问题必须是它构建的最常见的问题之一。你如何快速做到这一点?
速度是我关心的问题,因为我正在查看表中大约 5-1500 万行,以及 150,000 个不同的代码(并非所有都是股票,我存储了很多工具)。
非常感谢。
PS 如果重要,我将通过 Python API 访问 Influx,并且可以在代码中进行此过滤,但强烈希望在 DB 端进行此操作,以尽量减少通过网络传输大量行...
更新
我看到了这个关于左连接的问题,但它似乎已经过时了,我需要一个内在的,答案特别暗示的东西会得到支持......
可能的方法
这行得通吗?
SELECT LAST(Time), Price
FROM StockHistory
GROUP BY Ticker
如果是的话,它在一张大桌子上的速度有多快(参见上面的测量值)?