我目前有一个双列表,列有'概率'和'年龄'。我有一个给定的概率,我需要搜索表并返回与最接近概率相关的年龄。它已经按照年龄的升序排列,例如:
20 0.01050
21 0.02199
22 0.03155
23 0.04710
我现在唯一想到的就是回归所有年龄段的概率大于给定的概率,然后选择第一个概率。
select age from mydb.mytest
where probability > givenProbability;
我确信有更好的办法比这样做,所以我想知道那会是什么。
答案 0 :(得分:1)
这样的事情:
SELECT * FROM mytest
ORDER BY ABS( .0750 - probability )
LIMIT 1
应根据概率与给定概率之差的绝对值的排序列表返回前1个最接近的值。
答案 1 :(得分:0)
不同的解决方案适用于不同的DBMS。这个在DB2中工作,是标准的sql:
select age
from (
select age
, row_number() over (order by abs(probability - givenProbability)) as rn
from mydb.mytest
)
where rn = 1