2012-02-23 30 views
2

ルックアップ値を含む結合テーブル(実際にはルックアップしきい値と同じように)を使用して、SQLクエリに線形補間を構築する必要があります。私はSQLスクリプティングについては比較的新しいので、私は正しい方向で私を指すサンプルコードを探しましたが、私が出会ったSQLスクリプトのほとんどは、日付とタイムスタンプの間の補間用であり、私はこれらを私の状況に関連付けることができませんでした。ルックアップテーブルに基づくSQL線形補間

基本的に、私は、例えば、単一の列の小数点以下の値の多数の行を有するメインデータテーブルを有する:

Main_Value 
0.33 
0.12 
0.56 
0.42 
0.1 

は今、私は、上記行の各々に対する補間データ点を生成する必要がある、ベース非線形しきい値および関連する線形正規化された値を含む6行と結合ルックアップテーブルに:Main_Value列の値が0.45である場合

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

したがって、例えば、クエリは、その位置を検索します(またはその間の)Threshold_Levelとint Normalized_Value列の隣接値(この例では40になります)に基づいてこれをerpolateします。

特に、結合されたテーブルを使用して線形補間のSQLの例を追跡するのは難しいため、これに関するSQLクエリを構築するための洞察は本当に感謝しています。

私はいくつかの種類の丸めを使うことができると指摘されているので、以下にさらに詳細な表を示します。例えば、

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 

:私はそれを以下の表にThreshold_MinとThreshold_Max値の間にある(上記の最初のテーブルから)各Main_Valueを検索するSQLクエリを好きで、「Normalized_の%」の値を返しますMain_Valueテーブルの値が0.52の場合、Threshold_Min 0.45とThreshold_Max 0.60の間にあるため、Normalized_%は50%です。問題は、Threshold_Min値とMax値が線形でないことです。誰かがこれをスクリプトする方法の方向に私を指すことができますか?

+0

所定のメインデータテーブルの例に基づいて期待される結果を展開してください。実際に線形補間を使用しようとしているようには思えません。丸めに近いように見えます。 –

+0

あなたはどのデータベースを使用していますか? – heikkim

+0

ありがとうございます@ノーラ、私は元の質問に詳細なテーブルを追加しました - 私はあなたが提案するより良い解決策になると思う! – Jon

答えて

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を交換してください。

+0

ありがとう@aF、私はより詳細なテーブルで私の元の質問を更新しました - もし私がThreshold_MinとThreshold_Maxの2つの別々のルックアップテーブルを作成したなら、 'INNER JOIN on t1.Main_Value> = t1 .Threshold_Min AND <= t2。 Threshold_Max'? – Jon

関連する問題