【问题标题】:Selecting every nth row from SQL Server 2008 query result where table does not have row id column从表没有行 id 列的 SQL Server 2008 查询结果中选择每 n 行
【发布时间】:2016-10-18 09:03:11
【问题描述】:

我感觉如此接近......我认为我的问题是我如何使用 MOD 功能与ROW_NUMBER() 功能相结合,但我不明白我做错了什么。

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

如果我用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

我的表格如下所示(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 会抛出错误吗?

【问题讨论】:

    标签: sql-server


    【解决方案1】:

    您不能在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;
    

    还要注意 Martin 和 Marc 所指出的 - SQL Server 使用 % 而不是您从 VB 或其他地方引入的 MOD 运算符。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-17
      • 1970-01-01
      • 2020-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-22
      相关资源
      最近更新 更多