PostgreSQL La base de donnees la plus sophistiquee au monde.

Filtrer des tuples à intervalle temporel régulier

Conditions préalables

Imaginons une table contenant plusieurs colonnes dont une est une estampille. Par exemple la table mesures :

CREATE TABLE mesures (
     estampille TIMESTAMP WITH TIMEZONE PRIMARY KEY,
     valeur DOUBLE PRECISION);

Nous pouvons imaginer que les données sont temporellement réparties uniformément dans le temps (une donnée toutes les minutes par exemple).

Cas d'utilisation

On souhaite avoir les mesures entre deux dates en échantillonnant les données présentes dans la table mesures avec un intervalle régulier supérieur à la répartition initiale de la mesure (par exemple toutes les 5 minutes).

Requête

Nous allons utiliser la fonction EXTRACT avec comme argument EPOCH pour extraire le nombre de secondes écoulées depuis le 1er Janvier 1970 à minuit GMT sur l'estampille de chaque ligne. Nous pourrons ensuite utiliser la fonction modulo (%) pour fixer déterminer si la ligne est sélectionnable ou non.

SELECT 
 * 
FROM 
 mesures
WHERE
 estampille BETWEEN CURRENT_TIMESTAMP - '1 day'::INTERVAL AND CURRENT_TIMESTAMP
AND
 ( (EXTRACT(EPOCH FROM estampille)::INTEGER ) % (5 * 60) ) = 0;

Ainsi chaque fois que la date EPOCH sera un multiple de 5*60 secondes (5 minutes) le modulo sera égal à 0 et notre ligne sera sélectionnée.


Jean-Christophe Arnu le 15/09/2006

 
support/trucs_et_astuces/filtrer_des_tuples_a_intervalle_temporel_regulier.txt · Dernière modification: 2008/10/15 16:50 par ioguix