加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

如何选择相邻行到任意行(在sql或postgresql中)?

发布时间:2020-12-12 16:10:36 所属栏目:MsSql教程 来源:网络整理
导读:我想根据某些条件选择一些行,然后从该集合中取出一个条目,然后从它之前和之后的5行中选择一个条目. 现在,如果桌子上有一个主键(例如主键比目标行的键少5个,比目标行的键多5个),我可以做数字的操作. 所以选择主键为7的行和附近的行: select primary_key from
我想根据某些条件选择一些行,然后从该集合中取出一个条目,然后从它之前和之后的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

但是,如果我只选择某些行来开始,我会丢失使用主键的数字方法(并且假定键在其顺序上没有任何差距),并且需要另一种方式来获取最近的行,经过一定的目标行.

这种选择的主键输出可能看起来更随机,因此数学定位难以接受(因为某些结果将被过滤掉,例如,其中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

请注意,由于条件(例如因为有许多非活动项目)的示例导致的主键中的间隙,我不再获得最接近的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行.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读