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;
我的 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;