如何在QuestDB中使用时间绑定窗口函数?DuckDB查询迁移报错解决
DuckDB到QuestDB的时间窗口函数迁移方案
原DuckDB查询在QuestDB报错,核心原因是两者时间范围窗口的语法规则不同。QuestDB不支持RANGE BETWEEN INTERVAL ... preceding and current row这种写法,需要调整窗口子句的格式。
修改后的QuestDB查询语句
SELECT timestamp, symbol, price, first_value(price) OVER ( PARTITION BY symbol ORDER BY timestamp ASC RANGE '3s' PRECEDING ) AS first_price FROM trades WHERE timestamp >= '2024-08-22T14:15:29.206' LIMIT 40;
关键修改说明
- 把原窗口子句里的
RANGE BETWEEN INTERVAL 3 seconds preceding and current row替换为RANGE '3s' PRECEDING:- QuestDB中,
RANGE '<时间间隔>' PRECEDING直接定义了"从当前行timestamp往前推指定时间范围,到当前行"的窗口,和原查询逻辑完全一致 - 时间间隔也可以写全称,比如
'3 seconds',效果和'3s'相同
- QuestDB中,
PARTITION BY symbol和ORDER BY timestamp ASC保留原逻辑,确保按股票代码分区、按时间升序计算窗口- WHERE条件和LIMIT部分无需改动,和原查询保持一致
内容的提问来源于stack exchange,提问作者Nick The Greek
相关产品推荐
相关产品推荐

