基于查找表的SQL线性插值

我需要建立线性内插成一个SQL查询,使用包含查找值的连接表(更像查找阈值,实际上)。 由于我是比较新的SQL脚本,我已经寻找一个示例代码来点我的方向是正确的,但最让我遇到了SQL脚本是日期和时间戳之间的内插,我可以不涉及这些我的情况。

基本上,我有在单个列十进制值的许多行,例如一个主数据表:

Main_Value 0.33 0.12 0.56 0.42 0.1

现在,我需要产生内插数据点,每个上面的行,基于与6行的接合查找表,含有非线性阈值和相关联的线性归一化值:

Threshold_Level Normalized_Value 0 0 0.15 20 0.45 40 0.60 60 0.85 80 1 100

因此,例如,如果在Main_Value列中的值是0.45,该查询将查找其在(或之间)最接近Threshold_Level位置,这基于在Normalized_Value柱(相邻值将产生的40中的值内插这个例子)。

我真的是任何洞察构建解决此SQL查询感激,特别是因为它已经很难追查使用连接表线性内插任何SQL实例。

有人指出,我可以使用某种形式的舍入,所以我在下面包括了更详细的表。 我想SQL查询来查找它下表落在Threshold_Min和Threshold_Max值之间的每个Main_Value(来自上述第一个表),并返回'Normalized_%'值:

Threshold_Min Threshold_Max Normalized_% 0.00 0.15 0 0.15 0.18 5 0.18 0.22 10 0.22 0.25 15 0.25 0.28 20 0.28 0.32 25 0.32 0.35 30 0.35 0.38 35 0.38 0.42 40 0.42 0.45 45 0.45 0.60 50 0.60 0.63 55 0.63 0.66 60 0.66 0.68 65 0.68 0.71 70 0.71 0.74 75 0.74 0.77 80 0.77 0.79 85 0.79 0.82 90 0.82 0.85 95 0.85 1.00 100

例如,如果来自Main_Value表中的值是0.52,它落在Threshold_Min 0.45和Threshold_Max 0.60之间,所以返回的Normalized_%是50%。 的问题是,Threshold_Min和最大值不是线性的。 任何人都可以点我如何脚本这个方向?

--------------解决方案-------------

假设你想要的Main_Value和最近的(低和不高)或等于Normalized_Value ,你可以做这样的:

select t1.Main_Value, max(t2.Normalized_Value) as Normalized_Value
from #t1 t1
inner join #t2 t2 on t1.Main_Value >= t2.Threshold_Level
group by t1.Main_Value

更换#t1#t2由正确的表名。

分类:SQL 时间:2015-03-15 人气:0
本文关键词: SQL,加盟,线性插值
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.586 (s). 10 q(s)