sql-server – 从SQL Server 2008查询结果中选择第n行,其中表没有行ID列
|
我感觉如此接近…我认为我的问题是如何使用MOD功能结合ROW_NUMBER()函数,但我不明白我做错了什么. 我使用ROW_NUMBER()函数,因为我需要一种方式来选择每个“第n”行.我已经阅读了关于这个的其他页面(我用它来创建我的SQL)…但是我从SQL Server收到错误.我需要内部表连接(表的两个实例Tick_OneMin,H1和H2)同时获取不同证券的价格快照. 如果我用MOD函数注释掉该行… SQL执行正常…但如果我把它放在…. SQL Server抛出错误消息:
这是我在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运算符. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- sql-server – 什么可能导致’受影响的行’不正确
- SQL Server 用户权限管理,LINQ去除它的重复菜单
- sql-server – 为什么T-SQL ISNULL()截断字符串和
- 数据库设计 – 在数据库中,键和索引之间有什么区
- sql-server – SQL Server 2008生成一系列日期时
- sql-server – 为什么1899-12-30是Access/SQL Se
- SQL Server存储过程表名和字段名为变量的实现方法
- sql-server – 是否从SQL Server 2016安装媒体中
- sql-server – 如何在动态查询中连接uniqueident
- SQL Server数据类型nvarchar和varchar是不兼容的
