【发布时间】: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