查找具有最接近给定值的键的记录

时间:2014-07-15 19:19:14

标签: sql

我目前有一个双列表,列有'概率'和'年龄'。我有一个给定的概率,我需要搜索表并返回与最接近概率相关的年龄。它已经按照年龄的升序排列,例如:

20  0.01050
21  0.02199
22  0.03155
23  0.04710

我现在唯一想到的就是回归所有年龄段的概率大于给定的概率,然后选择第一个概率。

select age from mydb.mytest
    where probability > givenProbability;

我确信有更好的办法比这样做,所以我想知道那会是什么。

2 个答案:

答案 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