gpt4 book ai didi

mysql - 如何选择 SQL 查询范围内的项目?

转载 作者:太空宇宙 更新时间:2023-11-03 11:06:31 26 4
gpt4 key购买 nike

我的数据库在 MySQL 中。

假设我有下表:

id         number
1 45
2 25
3 66
4 43
......
......
......
30 54
31 21

等等……等等

我想要这样的查询:

从 myTable 中选择 *,其中数字 = 25

但我还想包括另外 2 个项目,一个在它上面,一个在它下面(基于 ID)。

我的查询结果集将出现以下结果集:1、2、3。

如果我选择了数字 66,那么结果集将包括 2、3、4 等等。

想法是通过说,嘿,我想要任何 ID 等于 1 减去此查询的 ID,以及 1 加上此查询的 ID 的任何内容。

我希望这是有道理的。

任何帮助都会很棒。

谢谢!

附言这样做的目的是将事件捕获到日志中,以便我可以查看某个事件发生前后发生的情况

最佳答案

SELECT t.*
FROM
myTable AS t
JOIN
( SELECT id
FROM myTable
WHERE number = 25
) AS my
ON t.id BETWEEN my.id - 1 AND my.id + 1 ;

请注意,如果您的 ID 有间隔,这将不会显示 3 行。

此外,如果您选择的数字(示例中为 25)出现不止一次(但 k 次),结果将是 3*k 行。


如果 id 列中如预期的那样存在间隙,您可以使用:

SELECT *
FROM
( SELECT t.*
FROM
myTable AS t
JOIN
( SELECT MIN(id) AS id
FROM myTable
WHERE number = 25
) AS my
ON t.id <= my.id
ORDER BY t.id DESC
LIMIT 2
) AS a

UNION ALL

SELECT *
FROM
( SELECT t.*
FROM
myTable AS t
JOIN
( SELECT MIN(id) AS id
FROM myTable
WHERE number = 25
) AS my
ON t.id > my.id
ORDER BY t.id ASC
LIMIT 1
) AS b ;

如果 id 列中有间隙并且 number 不是唯一的,那么参数 (25) 可以出现不止一次 (但是说 k 次),你可以有一个查询返回 3*k 行(几乎所有时间):

SELECT t.*
FROM
myTable AS t
JOIN
( SELECT id
FROM myTable
WHERE number = 25
) AS ti
ON t.id =
( SELECT tt.id
FROM myTable AS tt
WHERE tt.id < ti.id
ORDER BY tt.id DESC
LIMIT 1
)
OR t.id = ti.id
OR t.id =
( SELECT tt.id
FROM myTable AS tt
WHERE tt.id > ti.id
ORDER BY tt.id ASC
LIMIT 1
) ;

关于mysql - 如何选择 SQL 查询范围内的项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11571048/

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