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 15/04/2015 15:31:55

mortimer.pw
Membre

Premier/Dernier enregistrements

Bonjour,

Je travaille sous CenOS 5.9 avec un moteur PostgreSQL 9.3.2.

J'ai la table suivante :
     CREATE TABLE test(
          id serial NOT NULL,
          now timestamp with time zone NOT NULL,
          size bigint NOT NULL,
          CONSTRAINT pk_test PRIMARY KEY (id));

Je l'alimente de façon journalière (mais si j'ai commencé à l'alimenter un mercredi, je n'ai pas forcement de ligne pour le premier jour de la semaine).
Le champ size ne fait que cumuler de jour en jour, à la manière des stats PostgreSQL.

Je voudrai faire une requête qui me retourne la différence entre la size du dernier jour "alimenté" de la semaine dernière et la size du premier jour "alimenté" de la semaine dernière.

J'arrive bien à sélectionner les enregistrements de la semaine dernière :
     SELECT * FROM test WHERE extract(week from now)=extract(week from current_date)-1 ORDER BY now DESC;

Cela me retourne par exemple :
     5;"2015-04-12 00:01:01.587489+02";15988320440
     4;"2015-04-11 00:01:01.446174+02";15959443640
     3;"2015-04-10 00:01:02.15777+02";15798061240
     2;"2015-04-09 00:01:02.160302+02";15676590264
     1;"2015-04-08 00:01:01.655994+02";15561124024

Le problème est pour faire la différence entre premier et dernier jour.
J'ai regardé les fonctions window avec first_value et last_value mais je n'arrive pas à un résultat. Ce n'est peut-être pas la bonne technique.

Quelqu'un peut-il orienter mes recherches, svp ?

Dernière modification par mortimer.pw (16/04/2015 16:07:47)

Hors ligne

#2 16/04/2015 16:06:12

mortimer.pw
Membre

Re : Premier/Dernier enregistrements

Bonjour,
J'ai finalement trouvé.
MA solution pour ceux que cela pourrait intéresser :
     select size-(last_value(size) over(order by now desc rows between unbounded preceding and unbounded following))
     FROM test
     WHERE extract(week from now)=extract(week from current_date)-1
     ORDER BY now desc limit 1;

Hors ligne

Pied de page des forums