2

ルックアップ値を含む結合テーブルを使用して、線形補間を SQL クエリに組み込む必要があります (実際にはルックアップしきい値に似ています)。私は SQL スクリプトに比較的慣れていないので、サンプル コードを検索して正しい方向を示しましたが、遭遇した SQL スクリプトのほとんどは日付とタイムスタンプの間の補間用であり、これらを自分の状況に関連付けることができませんでした。 .

基本的に、1 つの列に 10 進数値の行が多数あるメイン データ テーブルがあります。次に例を示します。

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 クエリの作成に関する洞察に本当に感謝しています。

ある種の丸めを使用できることが指摘されているため、より詳細な表を以下に示します。次の表の Threshold_Min 値と Threshold_Max 値の間にある各 Main_Value (上記の最初の表から) を SQL クエリで検索し、「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 の値が線形でないことです。誰かがこれをスクリプト化する方法を教えてもらえますか?

4

1 に答える 1

0

Main_Valueと最も近い (low で high ではない) または equalが必要であると仮定すると、次の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を正しいテーブル名に置き換えます。

于 2012-02-23T14:19:35.297 に答える