SQL 检查值是否介于两个不同的值之间 table

SQL Check if value is beetween two different values from another table

我的 Oracle 数据库中有这样一个 table

ID
------
10 000
25 000
40 000
61 000
75 000

我需要检查值,例如 46 567,是否介于此 [=44= 的两个邻居值 之间] 和 选择最接近值的边框

46 567 在 40 000 和 61 000 之间,我应该选择 40 000,因为它比 61 000 更接近 46 567。

我当然可以找到这样的顶部和底部边界

--top border
SELECT MIN(ID) FROM (SELECT * FROM this_table WHERE ID > 46567);
--low border
SELECT MAX(ID) FROM (SELECT * FROM this_table WHERE ID < 46567);

但是一位很酷的专业人士告诉我应该执行一些分层查询,它看起来非常好,我不知道如何使用分层查询来解决这个问题。它应该看起来像这个斐波那契 SQL,但我无法实现它。

WITH
numbers (n, prev) AS (
SELECT 0 n, 1 prev from dual
UNION ALL
SELECT n + prev, n from numbers
WHERE n + prev < 50
)

你能帮帮我吗?

如果你有一个号码,你可以这样做:

select *
from (select t.*
      from likethis t
      where t.id <= 46567
      order by t.id
     ) t
where rownum = 1;

或者,只是:

select max(id)
from likethis t
where t.id < 46567;

编辑:

如果您想要最接近的值:

select *
from (select t.*
      from likethis t
      order by abs(t.id - 46567)
     ) t
where rownum = 1;