假设我有一个像这样的表:
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中实现。
答案 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