【问题标题】:Convert tick data to candlestick (OHLC) with MS localdb使用 MS localdb 将分时数据转换为烛台 (OHLC)
【发布时间】:2021-03-05 19:47:02
【问题描述】:

我一直在尝试遵循此解决方案 (Convert tick data to candlestick (OHLC) with SQL) 来满足我对将 SQL Server Express Localdb 作为数据库的家庭项目的需求。我的 SQL 知识有点模糊,所以希望得到帮助:-)

我有一个价格、一个浮点数 (53)(例如值 109,2)和一个时间、一个日期时间(例如值 2021-02-11 21:26:45.000)

我需要每分钟获取烛台。

然后我有这个 T-SQL:

SELECT 
    t1.price as open,
    m.high,
    m.low,
    t2.price as close,
    open_time
FROM
    (SELECT 
         MIN(Publication_time) AS min_time,
         MAX(Publication_time) AS max_time,
         MIN(price) AS low,
         MAX(price) AS high,
         FLOOR((CAST(DATEDIFF(s, Publication_time, GETUTCDATE()) AS BIGINT) * 1000) / (1000 * 60)) AS open_time          
      FROM 
          stocks
      GROUP BY 
          open_time) m
JOIN 
    stocks t1 ON t1.Publication_time = min_time
JOIN 
    stocks t2 ON t2.Publication_time = max_time

解析正常,但出现错误

列名“open_time”无效

关于执行。这样做的正确方法是什么?

【问题讨论】:

  • 试过 m.open_time 但又说:无效的列名'open_time'。
  • 您是否偶然在内部查询中输入了列名??
  • 我检查了 open_time 的使用但找不到任何类型错误。错误在第 12 行,其中指出:GROUP BY open_time) m
  • 啊好吧 - 是的,你不能在同一级别使用 group by 中“计算”列的名称......你需要重复group by 子句中的整个表达式
  • 那行得通。我用 FLOOR((CAST(Dateiff(s,Publication_time, GETUTCDATE()) AS BIGINT)*1000)/(1000*60)) 替换了分组后的 open_time 并得到很多行。我添加了一个过滤股票名称的 where 子句。不幸的是,价格是错误的。这是一个示例 open high low close open_time 2814 319,9 319,9 12760 32218 低点或高点或两者都可能是正确的,但为什么我的开盘价和收盘价与高低相差很大?

标签: sql sql-server tsql


【解决方案1】:

避免重复相同计算的常用方法是在 cross apply 中进行计算,例如

SELECT 
    MIN(Publication_time) AS min_time
    , MAX(Publication_time) AS max_time
    , MIN(price) AS low
    , MAX(price) AS high
    , C.open_time          
FROM stocks S
CROSS APPLY (VALUES (FLOOR((CAST(DATEDIFF(s, Publication_time, GETUTCDATE()) AS BIGINT) * 1000) / (1000 * 60)))) AS C (open_time)
GROUP BY C.open_time

子查询也可以完成同样的事情,但不够整洁 (IMO)。

【讨论】:

  • 如果这解决了问题,请考虑接受它。
猜你喜欢
  • 1970-01-01
  • 2019-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-06
  • 2020-06-15
相关资源
最近更新 更多