gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 10:03:11 25 4
gpt4 key购买 nike

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

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

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

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

关于sql-server - 从 SQL Server 2008 查询结果中选择每第 n 行,其中表没有行 id 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14407693/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com