Vous n'êtes pas identifié(e).
Pages : 1
Bonjour,
Mon problème se pose sur des données climatiques de la forme:
id dat_meteo value
231 "2007-05-08" 15.35
232 "2007-05-09" 16.4
233 "2007-05-10" 17.8
234 "2007-05-11" 16.25
235 "2007-05-12" 16.35
236 "2007-05-13" 18.4
237 "2007-05-14" 13.7
Il s'agit d'une table ou à chaque jour est associée une valeur d'un paramètre, ici la température moyenne du jour. J'aimerais construire une fonction qui me permette, à partir d'une date initiale, de trouver la date à laquelle la somme des valeurs cumulées depuis cette date atteint au moins 200. Typiquement j'ai une date de floraison, par exemple le 2007-05-08, je veux connaitre la date 2007-05-08 + 200 degrés cumulés.
Le codage de fonction sous postgres est encore bien mystérieux pour moi, je ne sais pas vraiment comment m'y prendre ...
Merci
Hors ligne
Bonjour,
Vous pouvez le faire en une seule requête, par exemple avec vos donnée trouver la date 2007-05-09 +70° cumulés :
SELECT dat_meteo
FROM (
SELECT dat_meteo, sum(value) OVER (ORDER BY dat_meteo) as cumul
FROM latable
WHERE dat_meteo > ('2007-05-09')
) s
WHERE s.cumul >= 70
ORDER BY dat_meteo
LIMIT 1;
Julien.
https://rjuju.github.io/
Hors ligne
Bonjour,
Merci pour votre aide, ci dessous la fonction finalement éditée :
DROP FUNCTION IF EXISTS fct_return_datestplus(date, integer, double precision) CASCADE;
CREATE OR REPLACE FUNCTION fct_return_datestplus(p_dat_initiale date, p_station integer, p_st double precision)
RETURNS date AS
$BODY$
DECLARE
v_date date;
BEGIN
-- récupération de la date correspondante
SELECT INTO v_date dat_meteo
FROM (
SELECT dat_meteo, sum(tmoy) OVER (ORDER BY dat_meteo) as cumul
FROM qry_var_tmoy
WHERE dat_meteo > (p_dat_initiale) AND id_station = p_station
) s
WHERE s.cumul >= p_st
ORDER BY dat_meteo
LIMIT 1;
RETURN v_date;
END
;$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
COMMENT ON FUNCTION fct_return_datestplus(date, integer, double precision) IS '
fct_return_datestplus: fonction permettant de calculer la date a partir d''une
date initiale et d''un cumul de temperature depuis cette date.
Remarques :
- le cumul commence le lendemain de la date initiale renseignee > (p_dat_initiale).
- pas de prise en compte d''une temperature de base ou temperature max
EXAMPLE 1 :
SELECT fct_return_datestplus(''2007-05-08'', 1801, 30);
';
qry_var_tmoy est une table qui regroupe les température moyennes quotidiennes,
id_station est un identifiant de station meteo
Hors ligne
Pages : 1