-je utiliser Oracle et ont le tableau suivant:requête SQL pour interpoler Baser d'horodatage sur les dossiers adjacents
create table test as
select to_date('02.05.2017 00:00', 'DD.MM.YYYY HH24:MI') as DT, 203.4 as VAL from dual union all
select to_date('02.05.2017 01:00', 'DD.MM.YYYY HH24:MI') as DT, 206.7 as VAL from dual union all
select to_date('02.05.2017 02:00', 'DD.MM.YYYY HH24:MI') as DT, 208.9 as VAL from dual union all
select to_date('02.05.2017 03:00', 'DD.MM.YYYY HH24:MI') as DT, 211.8 as VAL from dual union all
select to_date('02.05.2017 04:45', 'DD.MM.YYYY HH24:MI') as DT, 212.3 as VAL from dual union all
select to_date('02.05.2017 06:15', 'DD.MM.YYYY HH24:MI') as DT, 214.5 as VAL from dual union all
select to_date('02.05.2017 08:12', 'DD.MM.YYYY HH24:MI') as DT, 215 as VAL from dual
;
DT VAL
----------------------------
02.05.2017 00:00 203.4
02.05.2017 01:00 206.7
02.05.2017 02:00 208.9
02.05.2017 03:00 211.8
02.05.2017 04:45 212.3
02.05.2017 06:15 214.5
02.05.2017 08:12 215
je dois écrire pour interpoler la valeur requête SQL (ou Procédure PL/SQL) (VAL) pour tout horodatage (DT), en supposant que la valeur augmente constamment entre deux enregistrements voisins dans la table (c'est-à-dire linear interpolation).
Exemple:
Lorsque je sélectionne la valeur pour l'horodatage '02 .05.2017 00:00' , requête devrait me donner 203,4 (enregistrement avec un tel horodatage existe dans le tableau)
Lorsque je sélectionne valeur pour timestamp '02 .05.2017 00:30 ', la requête devrait me donner 205.05 (enregistrement avec tel horodatage n'existe pas dans la table, donc nous prenons un' middle 'entre 203.4 et 206.7, parce que l'horodatage voulu est au milieu entre leur horodateurs)
Lorsque je sélectionne la valeur pour l'horodatage '02 .05.2017 0h15' , requête devrait me donner 204,225 (une « quatrième partie » entre 203,4 et 206,7)
Quelle est la façon la plus simple de résoudre cette tâche?