我知道QuestDB有一些窗口函数,但仍然不支持lag
。我一直在使用 LT JOINS 来获取上一行的值。这并不理想(查询比需要的更详细并且连接性能更高),但它有效。
但是,我现在需要从上一行和之前的行中获取值。有了lag
,我可以使用 offset 参数,但如果没有它,我就会迷失方向。
在其他数据库中我可以这样写:
SELECT timestamp,
price,
Lag(price, 1) OVER(ORDER BY timestamp) AS price1,
Lag(price, 2) OVER(ORDER BY timestamp) AS price2
FROM table
因此每一行都会显示价格,加上之前第 1 行和第 2 行的价格。
有什么想法可以在 QuestDB 上得到这个吗?谢谢
最佳答案
lag
不是 QuestDB 当前实现的窗口函数之一,但您可以使用窗口函数 first_value
。通过使用行偏移,您可以获得与使用 lag
相同的结果。
例如,如果您转到questdb playground ,就可以执行
SELECT *,
FIRST_VALUE(price) OVER (PARTITION BY symbol ORDER BY timestamp rows BETWEEN 1 PRECEDING AND 1 PRECEDING) AS price_lag_1,
FIRST_VALUE(price) OVER (PARTITION BY symbol ORDER BY timestamp rows BETWEEN 2 PRECEDING AND 2 PRECEDING) AS price_lag_2
FROM
trades
WHERE timestamp IN '2023-11-30T10'
AND symbol = 'BTC-USD'
您应该获得前两行的价格以及每行的当前价格。
关于sql - 如何在 QuestDB 上使用滞后(偏移)窗口函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77580593/