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

SQL-获取两行之间包含值的数据,sql,postgresql,sqlite,Sql,Postgresql,Sqlite,假设我有一张这样的桌子: A | B 1 | something 2 | something2 4 | something3 8 | something4 它总是按顺序排列的,但它们不一定是连续的 现在假设我输入数字6,我想要返回的是: A | B 4 | something3 8 | something4 因为6在4和8之间 如果我搜索2,那么我只想要第二排。或者实际上第二个和第三个或者第一个和第二个都可以,没关系,过滤很容易 边缘情况也没有多大关系,但是假设我们有0,我只想要第一行,假设

假设我有一张这样的桌子:

A | B
1 | something
2 | something2
4 | something3
8 | something4
它总是按顺序排列的,但它们不一定是连续的

现在假设我输入数字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中是否也有这样做的方法。

这将使第一行大于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

谢谢,当我目前没有足够的分数时,我将对此进行投票,但我已经想到了这个解决方案,我担心的是,与其他可能更优雅的解决方案相比,它的速度较慢。@user10181387在A上有索引,这几乎是最有效的解决方案,没有索引,任何解决方案都不会有效。但使用UNION而不是UNIONALL是初学者常见的错误。