Oracle SQL-запрос для интерполяции в Oracle 12c - PullRequest
1 голос
/ 26 октября 2019

Интерполированные результаты

Уважаемые эксперты! Я правильно интерполировал значения для AddOn (выделены желтым цветом) с использованием аналитических функций regr_slope и regr_intercept с помощью приведенного ниже сценария

with CLP_ADDON_CALC_STG (addon_product, term_years, underlying_term_years, addon) as
( SELECT 'CCREPO', 0.5, 5 , 0.0447 FROM DUAL UNION ALL
SELECT 'CCREPO', 0.5, 10 , 0.0516 FROM DUAL UNION ALL
SELECT 'CCREPO', 0.7, 9 , NULL FROM DUAL UNION ALL
SELECT 'CCREPO', 1, 5 , 0.0567 FROM DUAL UNION ALL
SELECT 'CCREPO', 1, 10 , 0.0487 FROM DUAL)
,ordered_input_1 as (
SELECT
    i.*,
    row_number() over ( partition by addon_product order by term_years) rn
  FROM CLP_ADDON_CALC_STG i where (underlying_term_years < 9 or ( term_years < 0.7 and term_years > 0.7))
  or (term_years = 0.7 and underlying_term_years = 9)order by term_years, underlying_term_years
 -- where i.term_years 
)
SELECT 
 addon_product,
  term_years,
  underlying_term_years,
  addon, 
  term_years * regr_slope(addon, term_years) over ( partition by addon_product) +
       regr_intercept(addon, term_years) over ( partition by addon_product)
    as interpolated_value
FROM ordered_input_1
ORDER BY addon_product, term_years;

Теперь я нахожусь в ситуации, когда мне нужно выполнить интерполяцию по интерполированным значениям, полученным выше, для которых я не могу расположить строки в порядке, необходимом для вышеуказанной аналитической функции. Я ссылался на эту ссылку, чтобы привести строки в порядок ( Линейная интерполяция в Oracle с особыми случаями ) Но для следующего раунда интерполяции, для которого мне понадобятся строки в некотором порядке, или мне понадобитсязапрос (в строках, как видно из изображения, интерполированных результатов), который будет делать что-то вроде следующей формулы ((9-5)*0.05364 + (10-9)*0.0463)/(10-5), что даст мне 0.052712

Любая помощь будет принята с благодарностью. Заранее спасибо, Мурали

...