我知道QuestDB有一些窗口函数,但是
lag
仍然不支持。我一直在使用 LT JOINS
来获取上一行的值。这并不理想(查询比需要的更详细和连接性能),但它有效。
但是,我现在需要获取上一行和之前一行的值。有了
lag
我可以使用 offset 参数,但没有它我就迷失了。
有什么想法吗?谢谢
你是对的,
lag
不是当前实现的窗口函数之一,但是你可以使用窗口函数first_value
。通过使用行偏移,您可以获得与使用 lag
相同的结果。
例如,如果你去questdb游乐场,你可以执行
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'
您应该获得前两行的价格以及每行的当前价格。