SQL-获取两行之间包含值的行

时间:2018-08-04 22:57:55

标签: sql postgresql sqlite

假设我有一个像这样的表:

A | B
1 | something
2 | something2
4 | something3
8 | something4

总是按A排列,但不一定是连续的。

现在让我们输入数字6,我想返回的是:

A | B
4 | something3
8 | something4

因为6在4到8之间。

如果我搜索2,那么我只想要第二行。或者实际上第二和第三或第一和第二都很好,没关系,可以很容易地进行过滤。

边缘情况也无关紧要,但假设我们有0个,我只希望第一行,而有12个,我只想要最后一行,但是如果它也没有返回任何内容,那还是很好。

我有一个选择是将它们存储为范围,即:

A | B    | C
1 | 2    | something
2 | 4    | something2
4 | 8    | something3
8 | null | something4

...然后查找将很容易,但我正在尝试避免这种情况。我真的想不出一种方法来进行这种连续的行比较。

我正在使用PSQL,但我更好奇是否还有一种方法可以在SQLite中实现。

1 个答案:

答案 0 :(得分:1)

这将使您得到的第一行大于6,第一行小于6,而第6行(假设输入为6)。

您可以玩这个。也许首先运行最后一部分,如果没有得到任何结果,请运行第一和第二部分的并集以获取周围的行。

select *
from t
where A > 6
order by A asc
limit 1

union

select *
from t
where A < 6
order by A desc
limit 1

union

select *
from t
where A = 6