SQL检查值是否来自另一个表的两个不同值

时间:2015-06-27 20:59:00

标签: sql oracle oracle10g

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

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

我需要检查值,例如46 567,是否来自此表中的某些两个邻居值选择最近的边界值< /强>

46 567在40 000到61 000之间,我应该选择40 000,因为它接近46 567而不是61 000.

当然,我可以找到像这样的顶部和低边框

--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);

但是一个很酷的专家告诉我,我应该执行一些分层查询,它看起来真的很好,我不知道如何使用分层查询来解决这个问题。它应该看起来像这个Fibonacci 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
)

你能帮助我吗?

1 个答案:

答案 0 :(得分:2)

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

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;