使用 SQL 将价格变动数据转换为烛台 (OHLC)

Enr*_*que 4 mysql sql

我有一个包含列的表:

时间以毫秒为单位 价格

我想用它创建 OHLC(开盘价、最高价、最低价、收盘价)蜡烛。这基本上是对某个时间段(假设每 1 分钟)的所有价格进行分组,并选择它们的最小、最大以及第一个和最后一个价格。

到目前为止我已经创建了这个查询:

SELECT
  MIN(price) as low,
  MAX(price) as  high,
  FLOOR(timeInMilliseconds/(1000*60)) as open_time
FROM ticks
GROUP BY FLOOR(timeInMilliseconds/(1000*60))
Run Code Online (Sandbox Code Playgroud)

这可行,但问题是开盘价(第一个)和收盘价(最后一个)。
有没有办法让它们(有效地)进入同一个查询?

Nic*_*ick 6

您需要找到每个时间段的最大和最小时间,然后将JOIN表提供给它们以获取price这些时间的值:

SELECT t1.price AS open,
       m.high,
       m.low,
       t2.price as close,
       open_time
FROM (SELECT MIN(timeInMilliseconds) AS min_time,
             MAX(timeInMilliseconds) AS max_time,
             MIN(price) as low,
             MAX(price) as high,
             FLOOR(timeInMilliseconds/(1000*60)) as open_time
      FROM ticks
      GROUP BY open_time) m
JOIN ticks t1 ON t1.timeInMilliseconds = min_time
JOIN ticks t2 ON t2.timeInMilliseconds = max_time
Run Code Online (Sandbox Code Playgroud)

dbfiddle 上的演示