我正在做一个价格数据项目,试图存储 OHLC 1 分钟的数据,然后在不同的时间间隔内对其进行采样。我决定尝试 QuestDB,因为它具有简洁的时间序列功能,例如SAMPLE BY
但我碰壁了。
我想用来SAMPLE BY
查询我的数据,如下所示:
时间戳 | 打开 | 高的 | 低的 | 关 |
---|---|---|---|---|
“2021-09-10T19:43:21.657672Z” | 2.0 | 4.0 | 1.0 | 3.0 |
“2021-09-15T06:12:42.267416Z” | 3.0 | 6.0 | 3.0 | 6.0 |
例如,对于上面的两行,它们位于同一月份,我想运行SAMPLE BY 1M
并聚合该月份的值。
对于高值和低值,聚合函数是min(low)
and max(high)
,但我不知道如何处理打开和关闭值。
我尝试改造这种方法,但在没有错误的情况下得到了以下结果:
with ohlc as (
select row_number() over (
partition by cast(cast(timestamp as float) / 1000000 / 60 / 60 / 24 / 7 / 4.34524 as int)
order by timestamp
), open, high, low, close, timestamp
from eurusd
)
select max(high) high,
min(low) low,
min(case when rn_asc = 1 then [open] end) as open
from ohlc
我遇到的一些错误:
- 添加第二个
row_number() over [...] order by timestamp desc
失败并出现语法错误。如果我删除desc
它,那么我就完全删除了该列,从那时起它与第一个相同。 - 分别与“基本查询不提供专用的 TIMESTAMP 列”和“按表达式分组与语句中选择的任何内容不匹配”错误都不起作用
SAMPLE BY
。GROUP BY
- QuestDB 可以识别,
CASE WHEN THEN
但如果我在该部分中生成列名,则THEN
它无法正常工作且没有错误消息。
我目前在浏览 QuestDB 教程、SO 问题和 GitHub 问题时被困在这一点上,因为这似乎是一个常见的操作,特别是因为他们写了许多价格时间序列数据教程,但没有一个地址这个。
我想知道是否有人遇到过这种情况并有解决方案?谢谢!