我想从两列中选择数据,两列的长度相似(@fetch)但在同一个表中的某个偏移处。
然而,即便如此,我遇到了语法错误。我更喜欢这种连接解决方案。感谢。
SELECT c.[Close],h.[High]
FROM
(
SELECT [Close],[CityID],[Time]
FROM [dataSQL].[dbo].[temperature]
WHERE [Time]<@time
ORDER BY [Time] DESC
OFFSET 0 ROWS
FETCH NEXT (@fetch) ROWS ONLY
) AS c
JOIN
(
SELECT [High],[CityID],[Time]
FROM [dataSQL].[dbo].[temperature]
WHERE [Time]<@time
ORDER BY [Time] DESC
OFFSET (@offset) ROWS
FETCH NEXT (@fetch) ROWS ONLY
) AS h
ON c.[CityID]=h.[CityID] AND c.[Time]=h.[Time]
WHERE c.[CityID]=@name AND h.[CityID]=@name;
编辑: 现在,这两个列中的重复都返回了超过预期的结果
编辑: 现在返回同一行中没有偏移量的列,因为我需要匹配主键!必须有一个偏移量,问题是这个表包含两个以上城市的数据,所以你不能使用ROW_NUMBER()!
这是我的表架构:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Temperature](
[Time] [datetime] NOT NULL,
[CityID] [tinyint] NOT NULL,
[High] [real] NULL,
[Close] [real] NULL,
CONSTRAINT [pk_time_cityid] PRIMARY KEY CLUSTERED
(
[Time] ASC,
[CityID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[Temperature] WITH CHECK ADD CONSTRAINT [FK_Temperature_Cities] FOREIGN KEY([CityID])
REFERENCES [dbo].[Cities] ([CityID])
GO
ALTER TABLE [dbo].[Temperature] CHECK CONSTRAINT [FK_Temperature_Cities]
GO
答案 0 :(得分:0)
请注意,可以编辑您的问题以更正您的查询。
除OFFSET 0 ROWS
和FETCH NEXT (...) ROWS ONLY
问题外,您还需要在子查询中分别使用SELECT [CityID],[Close]
和SELECT [CityID],[High]
。子查询外部可用的子查询中唯一的字段是您明确指定的字段。这包括加入条件。
关于你的评论,你得到了你期望平方的行数,你可能有一个隐含的交叉连接,它正在创建一个笛卡尔积。您需要使用dbo.temperature
主键中的字段加入表格。尝试将一些示例数据添加到您的问题和可能的表架构中。