PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 14/05/2012 16:40:53

yoruichiy
Membre

somme de valeurs précédentes et courantes

bonjour,

je débute en sql,

je dois faire la somme de différences de dates en minutes entre la date n-1 et la date n jusqu'à ce que le champ valeur soit égal à 0 .


on m'a conseillé d'utiliser les curseurs, je ne sais pas les utiliser, g laborieusement créer cette requête qui ne renvoie pas d'erreur:
je ne peux pas créer d'autres variables dans le déclare sans avoir d'erreurs pourquoi?



BEGIN WORK;

DECLARE

    value CURSOR FOR SELECT * FROM tds_archivedtemporaryparamvalue_ddo
    order by devicedate;   

FETCH FORWARD 5 IN value;
CLOSE value;
--COMMIT WORK;
END WORK;


la tentative de déclaration de variable seule ne marche pas je ne trouve pas pourquoi sur aucune source internet:
BEGIN WORK;

DECLARE
    firstvalue timestamp;
    --firstValue  :=select min(devicedate) from tds_archivedtemporaryparamvalue_ddo where value=1;


--COMMIT WORK;
END WORK;


ERREUR: erreur de syntaxe sur ou près de « timestamp »
État SQL :42601
Caractère : 34


merci par avance

Hors ligne

#2 14/05/2012 16:57:17

rjuju
Administrateur

Re : somme de valeurs précédentes et courantes

Bonjour.
Je ne comprend pas du tout votre question sur la somme de différences. Que voulez-vous faire exactement ?

Sinon, vous ne faites que des instructions sql et non pas une procédure stockée pl/pgsql.
Pour la base des procédures stockées, je vous conseillerai de regarder cette documentation : http://docs.postgresqlfr.org/9.1/plpgsql.html

Hors ligne

#3 14/05/2012 17:04:29

yoruichiy
Membre

Re : somme de valeurs précédentes et courantes

en fait g une table avec des dates, une valeur égale à 0 ou 1, les dates sont triées par ordre croissant

je dois faire : somme(date_courante - date_précedente) tant que valeur_courante =1

mais je c pas du tout comment le faire en sql

Hors ligne

#4 14/05/2012 17:26:38

rjuju
Administrateur

Re : somme de valeurs précédentes et courantes

Si vous êtes en version 8.4 ou supérieure, vous pouvez utiliser les CTE et le fonctions window pour cela.
Une requête de ce genre devrait marcher :

WITH dte_max AS (SELECT min(devicedate) as dte
FROM tds_archivedtemporaryparamvalue_ddo
WHERE value = 0)

SELECT sum(dte-lag) FROM (
SELECT devicedate,lag(dte) over()
FROM tds_archivedtemporaryparamvalue_ddo
WHERE devicedate < (SELECT dte FROM dte_max)
)src

Hors ligne

#5 14/05/2012 17:34:25

yoruichiy
Membre

Re : somme de valeurs précédentes et courantes

merci smile

Hors ligne

Pied de page des forums