Мне нужно встроить линейную интерполяцию в запрос 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
Так, например, если значение в столбце 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 не являются линейными. Может ли кто-нибудь указать мне, как написать это?