如何使用 SAMPLE BY 在 QuestDB 中聚合开盘价和收盘价
How do I aggregate open and close values in QuestDB using SAMPLE BY
我正在做一个价格数据项目,试图存储 OHLC 1 分钟的数据,然后在不同的时间间隔内对其进行采样。我决定尝试使用 QuestDB,因为它具有整洁的时间序列功能,例如 SAMPLE BY
但我 运行 撞墙了。
我想使用 SAMPLE BY
来查询我的数据,它看起来像这样:
timestamp
open
high
low
close
"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)
和 max(high)
,但我不知道如何处理开盘价和收盘价。
我尝试过改造 this approach,但没有出现以下错误:
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
它会起作用,所以我只是完全删除了该列,因为它与第一列相同。
- 末尾的
SAMPLE BY
和 GROUP BY
都无法处理“基本查询不提供专用的 TIMESTAMP 列”和“按表达式分组不匹配语句中的任何内容 select”错误, 分别.
- QuestDB 识别
CASE WHEN THEN
,但如果我在 THEN
部分生成一个列名,它就无法工作,没有错误消息。
我目前在查看 QuestDB 教程、SO 问题和 GitHub 问题时遇到了这个问题,因为这似乎是一个常见的操作,特别是因为他们写了很多价格时间序列数据教程,但 none 解决了这个问题。
我想知道是否有人遇到过这个问题并且有解决办法?谢谢!
打开和关闭将是first()
和last()
。
select max(high) high,
min(low) low,
first(open) as open,
last(close) as close
from ohlc
SAMPLE BY 1M
我正在做一个价格数据项目,试图存储 OHLC 1 分钟的数据,然后在不同的时间间隔内对其进行采样。我决定尝试使用 QuestDB,因为它具有整洁的时间序列功能,例如 SAMPLE BY
但我 运行 撞墙了。
我想使用 SAMPLE BY
来查询我的数据,它看起来像这样:
timestamp | open | high | low | close |
---|---|---|---|---|
"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)
和 max(high)
,但我不知道如何处理开盘价和收盘价。
我尝试过改造 this approach,但没有出现以下错误:
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
它会起作用,所以我只是完全删除了该列,因为它与第一列相同。 - 末尾的
SAMPLE BY
和GROUP BY
都无法处理“基本查询不提供专用的 TIMESTAMP 列”和“按表达式分组不匹配语句中的任何内容 select”错误, 分别. - QuestDB 识别
CASE WHEN THEN
,但如果我在THEN
部分生成一个列名,它就无法工作,没有错误消息。
我目前在查看 QuestDB 教程、SO 问题和 GitHub 问题时遇到了这个问题,因为这似乎是一个常见的操作,特别是因为他们写了很多价格时间序列数据教程,但 none 解决了这个问题。
我想知道是否有人遇到过这个问题并且有解决办法?谢谢!
打开和关闭将是first()
和last()
。
select max(high) high,
min(low) low,
first(open) as open,
last(close) as close
from ohlc
SAMPLE BY 1M