gpt4 book ai didi

sql - 获取项目之前和之后的项目 - SQL Query

转载 作者:行者123 更新时间:2023-12-01 09:04:33 25 4
gpt4 key购买 nike

我是 SQL 新手,所以我需要您的帮助来查询。基本上我有一个邮政编码数据库,我想在选定的邮政编码之前获取 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')

我从某个地方获取了一个示例查询,并成功地将其转换为我使用。唯一的问题是此查询返回当前项目和下一个项目。相反,它应该返回前 3 个项目、当前项目和下三个项目。

最佳答案

使用公用表表达式(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

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

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

关于sql - 获取项目之前和之后的项目 - SQL Query,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10468820/

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