Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#1 04/07/2014 11:16:01
- Fanch
- Membre
Recherche date d'atteinte d'un seuil
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
#2 04/07/2014 20:13:29
- rjuju
- Administrateur
Re : Recherche date d'atteinte d'un seuil
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
#3 16/07/2014 14:10:17
- Fanch
- Membre
Re : Recherche date d'atteinte d'un seuil
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