加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql-server – 从SQL Server 2008查询结果中选择第n行,其中表没

发布时间:2020-12-12 08:55:32 所属栏目:MsSql教程 来源:网络整理
导读:我感觉如此接近…我认为我的问题是如何使用MOD功能结合ROW_NUMBER()函数,但我不明白我做错了什么. 我使用ROW_NUMBER()函数,因为我需要一种方式来选择每个“第n”行.我已经阅读了关于这个的其他页面(我用它来创建我的SQL)…但是我从SQL Server收到错误.我需要
我感觉如此接近…我认为我的问题是如何使用MOD功能结合ROW_NUMBER()函数,但我不明白我做错了什么.

我使用ROW_NUMBER()函数,因为我需要一种方式来选择每个“第n”行.我已经阅读了关于这个的其他页面(我用它来创建我的SQL)…但是我从SQL Server收到错误.我需要内部表连接(表的两个实例Tick_OneMin,H1和H2)同时获取不同证券的价格快照.

如果我用MOD函数注释掉该行… SQL执行正常…但如果我把它放在…. SQL Server抛出错误消息:

An expression of non-boolean type specified in a context where a condition is expected,near ‘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

我的表格如下(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

我想创建以下输出

Date  -   ZN.Price -  ES.Price
====     ========   ========
1/3/2012 -  132.5  - 1470
1/3/2012 -  133    - 1475

为什么SQL SErver会抛出错误的任何想法?

解决方法

您不能引用WHERE子句中的SELECT子句中定义的别名,因为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;

还要注意马丁和马克所指出的 – SQL Server使用%不是从VB或其他地方引入的MOD运算符.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读