我想根据特定条件选择一些行,然后从该集合中取出一个条目及其前后的 5 行。
现在,如果表上有主键(例如,主键在数值上比目标行的键小 5 且比目标行的键多 5),我可以在数字上执行此操作。
因此选择主键为 7 的行及其附近的行:
select primary_key from table where primary_key > (7-5) order by primary_key limit 11;
2
3
4
5
6
-=7=-
8
9
10
11
12
但是,如果我只选择某些行开始,我就会失去使用主键的数字方法(并且假设键的顺序没有任何间隙),并且需要另一种方法来获取之前和之前最接近的行在某个目标行之后。
这种选择的主键输出可能看起来更随机,因此不太容易进行数学定位(因为某些结果将被过滤掉,例如使用where active=1
):
select primary_key from table where primary_key > (34-5)
order by primary_key where active=1 limit 11;
30
-=34=-
80
83
100
113
125
126
127
128
129
请注意示例中的 where 条件 (例如,因为有许多不活动的项目),我不再得到上面最接近的 5 和下面最接近的 5,而是得到下面最接近的 1 和上面最接近的 9。
如果您使用一种编程语言运行两个查询,则有很多种方法可以做到这一点,但以下是在一个 SQL 查询中执行此操作的一种方法:
(SELECT * FROM table WHERE id >= 34 AND active = 1 ORDER BY id ASC LIMIT 6)
UNION
(SELECT * FROM table WHERE id < 34 AND active = 1 ORDER BY id DESC LIMIT 5)
ORDER BY id ASC
这将返回上面 5 行、目标行和下面 5 行。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)