获取项目之前和之后的项目 - SQL查询

har*_*anb 3 sql

我是SQL新手,所以我需要你的查询帮助.基本上我有一个ZipCodes数据库,我希望在选定的ZipCode和之后的3个项目之前获得3个项目.我提出的查询非常糟糕......

WITH numberedlogtable AS
(
SELECT *
 FROM dbo.US
)

SELECT *
FROM numberedlogtable
WHERE ZipCode IN (SELECT ZipCode+i
             FROM numberedlogtable
             CROSS JOIN (SELECT -1 AS i UNION ALL SELECT 0 UNION ALL SELECT 1) n
             WHERE ZipCode='91803')
Run Code Online (Sandbox Code Playgroud)

我从某处获取了一个示例查询,并成功将其转换为我的用途.唯一的问题是此Query返回当前项和下一项.相反,它应该返回前3个项目,当前项目和接下来的三个项目.

And*_*bel 5

使用公共表表达式(WITH部件)生成编号序列:

WITH NumberedZipCodes AS
(SELECT SELECT ROW_NUMBER() OVER (ORDER BY ZipCode) AS RowNumber, *
FROM ZipCodes)

SELECT * From NumberedZipCodes
WHERE RowNumber BETWEEN
(SELECT RowNumber FROM NumberedZipCodes WHERE ZipCode=91803) - 3
AND (SELECT RowNumber FROM NumberedPerson WHERE ZipCode=91803) + 3
Run Code Online (Sandbox Code Playgroud)

通常在SQL中,没有匹配中的上一个或下一个项目的概念.实际上,除非指定了order by子句,否则将按照sql引擎找到的任何顺序返回行.要进行这样的查询,必须应用订单并生成索引编号.这是在NumberedZipCodes中完成的.第二部分只是一个从中获取数据的查询.

要使查询有效运行,请确保ZipCode列上有索引.