【发布时间】:2015-12-04 18:23:39
【问题描述】:
我想根据特定条件选择一些行,然后从该集合中获取一个条目以及它之前和之后的 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
请注意,由于条件示例(例如,因为有许多非活动项目)导致的主键中的间隙,我不再得到最接近的上面的 5 和下面的 5 , 而我得到的是下面最接近的 1 和上面最接近的 9。
【问题讨论】:
-
我认为您编写的 SELECT 语句在这两个示例中都适用。
-
Err,select 语句会返回值,是的,但是它返回的行基本上是随机的,而不是上面的 5 和下面的 5,这是问题所在。
标签: sql postgresql selection