基于查找表的SQL线性插值
我需要使用包含查找值(实际上更像是查找阈值)的联接表将线性插值构建到SQL查询中。由于我对SQL脚本比较陌生,我已经搜索了一个示例代码来为我指明正确的方向,但我遇到的大多数SQL脚本都是用于在日期和时间戳之间插入的,我无法将它们与我的情况联系起来 基本上,我有一个主数据表,在一列中有许多行的十进制值,例如:基于查找表的SQL线性插值,sql,join,linear-interpolation,Sql,Join,Linear Interpolation,我需要使用包含查找值(实际上更像是查找阈值)的联接表将线性插值构建到SQL查询中。由于我对SQL脚本比较陌生,我已经搜索了一个示例代码来为我指明正确的方向,但我遇到的大多数SQL脚本都是用于在日期和时间戳之间插入的,我无法将它们与我的情况联系起来 基本上,我有一个主数据表,在一列中有许多行的十进制值,例如: Main_Value 0.33 0.12 0.56 0.42 0.1 现在,我需要基于一个包含6行的联合查找表,为上面的每一行生成插值数据点,该表包含非线性阈值和相关的线性规范化值:
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
因此,例如,如果主_值列中的值为0.45,查询将查找其在最近的阈值_级别中(或之间)的位置,并基于规格化_值列中的相邻值对其进行插值(在本例中,该值将为40)
如果您能深入了解如何围绕这一点构建SQL查询,我将不胜感激,特别是因为使用联接表很难找到任何线性插值的SQL示例
有人指出我可以使用某种舍入,因此我在下面提供了一个更详细的表格。我希望SQL查询查找每个主值(来自上面的第一个表),其中它位于下表中的Threshold_Min和Threshold_Max值之间,并返回“Normalized_u%”值:
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
例如,如果主_值表中的值为0.52,则它介于Threshold_Min 0.45和Threshold_Max 0.60之间,因此返回的规格化_%为50%。问题在于阈值_Min和Max值不是线性的。有人能告诉我如何编写脚本吗?假设您想要
主\u值和最近的(低而不是高)或相等的标准化\u值,您可以这样做:
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
。假设您需要主值
和最近的(低和不高)或相等的标准化值
,可以这样做:
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
。请根据给定的主数据表示例展开预期结果。听起来你并不是真的想在这里使用线性插值-看起来更像是舍入。谢谢@Norla,我在原始问题中添加了一个详细的表格-我认为舍入将是一个更好的解决方案,正如你所建议的@heikkim-我正在使用SQL Server2005@Jon很乐意帮忙。我曾在SQL中使用过线性插值-它很糟糕请根据给定的主数据表示例展开预期结果。听起来你并不是真的想在这里使用线性插值-看起来更像是舍入。谢谢@Norla,我在原始问题中添加了一个详细的表格-我认为舍入将是一个更好的解决方案,正如你所建议的@heikkim-我正在使用SQL Server2005@Jon很乐意帮忙。我曾在SQL中使用过线性插值-它很糟糕DThanks@aF,我已经用一个更详细的表格更新了我的原始问题-如果我为Threshold\u Min和Threshold\u Max创建了两个单独的查找表,那么我可以通过在t1.Main\u Value>=t1.Threshold\u Min上添加内部连接来使用脚本,谢谢@aF,我用一个更详细的表更新了我的原始问题-如果我为Threshold\u Min和Threshold\u Max创建了两个单独的查找表,那么我可以通过在t1.Main\u Value>=t1.Threshold\u Min和