我感觉如此接近...我认为我的问题是我如何使用MOD功能结合ROW_NUMBER()功能,但我不明白我做错了什么.
我正在使用该ROW_NUMBER()功能,因为我需要一种方法来选择每个"第n"行.我已经阅读了关于此的其他页面(我用它们来创建我的SQL)...但是我从SQL Server收到错误.我需要内部表连接(表的2个实例Tick_OneMin,H1和H2)来同时获取不同证券的价格快照.
如果我用MOD函数注释掉行... SQL执行得很好......但是如果我把它放进去...... SQL Server会抛出错误信息:
在"MOD"附近的预期条件的上下文中指定的非布尔类型的表达式.
这是我对SQL的尝试 -
SELECT
ROW_NUMBER() OVER (ORDER BY H1.CombDateTime ASC) AS RowID,
H1.CombDateTime,
H1.Close_PX as 'TYA_Close',
H2.Close_PX 'ESA_Close'
FROM
Tick_OneMin as H1, Tick_OneMin as H2
WHERE
H1.Ticker = 'TYA'
AND H2.Ticker = 'ESA'
AND H1.CombDateTime >= '12/28/2012 10:00 AM'
AND H1.CombDateTime <= '12/28/2012 10:30 AM'
AND H1.CombDateTime = H2.CombDateTime
AND RowID MOD 4 = 0
-- this "RowID MOD 4 = 0" is throwing an error in SQL Server
ORDER BY
H1.CombDateTime ASC
Run Code Online (Sandbox Code Playgroud)
我的表看起来如下(1个表有3列)
表 Tick_OneMin
Ticker - CombDateTime - Close_PX
------------------------------------
ES - 1/3/2012 10:00 AM - 1470
ZN - 1/3/2012 10:00 AM - 132.5
ES - 1/3/2012 10:01 AM - 1475
ZN - 1/3/2012 10:01 AM - 133
Run Code Online (Sandbox Code Playgroud)
我想创建以下输出
Date - ZN.Price - ES.Price
==== ======== ========
1/3/2012 - 132.5 - 1470
1/3/2012 - 133 - 1475
Run Code Online (Sandbox Code Playgroud)
任何想法为什么SQL SErver抛出错误?
Aar*_*and 18
您不能引用SELECT子句中子句中定义的别名WHERE,因为WHERE首先进行解析.一种解决方法是使用子查询或CTE:
WITH x AS
(
SELECT ROW_NUMBER() OVER (ORDER BY H1.CombDateTime ASC) AS RowID,
... rest of query
)
SELECT CombDateTime, TYA_Close, ESA_Close --, RowID
FROM x
WHERE RowID % 4 = 0
ORDER BY CombDateTime;
Run Code Online (Sandbox Code Playgroud)
另请注意Martin和Marc指出的内容 - SQL Server %不使用MOD您从VB或其他地方引入的运算符.
| 归档时间: |
|
| 查看次数: |
14151 次 |
| 最近记录: |