我需要在SQL查询中构建线性插值,使用包含查找值的连接表(实际上更像是查找阈值)。因为我对SQL脚本相对较新,所以我搜索了一个示例代码,指出我正确的方向,但我遇到的大多数SQL脚本都是在日期和时间戳之间进行插值,我无法将这些与我的情况联系起来。
基本上,我在一个列中有一个包含多行十进制值的主数据表,例如:
Main_Value
0.33
0.12
0.56
0.42
0.1
现在,我需要根据包含非线性阈值和相关线性标准化值的联接查找表,为上面的每一行生成插值数据点:
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查询查找每个Main_Value(来自上面的第一个表),它位于下表中的Threshold_Min和Threshold_Max值之间,并返回'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和Max值不是线性的。有人能指出我如何编写脚本吗?
答案 0 :(得分:0)
假设你想要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
替换为正确的表名。