基于查找表的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行的联合查找表,为上面的每一行生成插值数据点,该表包含非线性阈值和相关的线性规范化值:

我需要使用包含查找值(实际上更像是查找阈值)的联接表将线性插值构建到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
因此,例如,如果主_值列中的值为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和