加入偏移柱的解决方案

时间:2015-12-03 14:13:10

标签: tsql join

我想从两列中选择数据,两列的长度相似(@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

1 个答案:

答案 0 :(得分:0)

请注意,可以编辑您的问题以更正您的查询。

OFFSET 0 ROWSFETCH NEXT (...) ROWS ONLY问题外,您还需要在子查询中分别使用SELECT [CityID],[Close]SELECT [CityID],[High]。子查询外部可用的子查询中唯一的字段是您明确指定的字段。这包括加入条件。

关于你的评论,你得到了你期望平方的行数,你可能有一个隐含的交叉连接,它正在创建一个笛卡尔积。您需要使用dbo.temperature主键中的字段加入表格。尝试将一些示例数据添加到您的问题和可能的表架构中。