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 08/08/2012 11:30:54

damalaan
Membre

requête avec where sur année et mois d'un timestamp

Bonjour,

J'ai la requête suivante

 SELECT 
	A.trn_esp, 
	A.trn_tournee, 
	A.trn_usine, 	
	B.mois, 
	A."EtTournee",
	B."MoyLabo"*2 as Indicateur, 
        CASE
            WHEN A."EtTournee" > (2::numeric * B."MoyLabo") THEN 'Alerte'::text
            ELSE 'ok'::text
        END AS "Alerte"
   FROM 
	"vw_simuMoisMoyLabo" B, 
	"vw_simuMoisEtTournee" A
  WHERE 
	(
	B.trn_esp = A.trn_esp 
	AND 
	(
	EXTRACT(YEAR FROM B.mois) = EXTRACT(YEAR FROM A.mois)
	AND
	EXTRACT(MONTH FROM B.mois) = EXTRACT(MONTH FROM A.mois)
	)
	)
  ORDER BY trn_esp, "Alerte";

Je voudrais savoir si ce que j'ai fait sur le WHERE est judicieux ou non.
Y a t il un autre moyen de dire : je veux les lignes des tables A et B en faisant une jointure sur le mois et l'année d'un timestamp?

Dernière modification par damalaan (08/08/2012 11:31:15)

Hors ligne

#2 08/08/2012 12:04:21

gleu
Administrateur

Re : requête avec where sur année et mois d'un timestamp

Il serait peut-être plus simple de remplacer ça par un : to_char(B.mois, 'YYYYMM') = to_char(A.mois, 'YYYYMM')

Mais bon, ça ne change pas vraiment le problème.

Bizarre d'avoir une date sur une colonne appelée mois smile


Guillaume.

Hors ligne

#3 08/08/2012 15:15:42

damalaan
Membre

Re : requête avec where sur année et mois d'un timestamp

Bizarre d'avoir une date sur une colonne appelée mois : c'est une "fausse" date car il n'y a que le mois et l'année qui m'intéresse, le jour est toujours à 1
Mais comme suggéré par Marc Cousin dans une réponse à un de mes posts précédents, il est plus simple de faire des calculs :
dans la table de départ, le mois est stocké sous forme numérique du genre 1208, mais cela pose problème pour faire des calcul du genre 1201 - 1mois; je l'ai donc passé en timestamp (mais je n'ai pas changé le nom!)

Passé de

        EXTRACT(YEAR FROM B.mois) = EXTRACT(YEAR FROM A.mois)
	AND
	EXTRACT(MONTH FROM B.mois) = EXTRACT(MONTH FROM A.mois)

à

to_char(B.mois, 'YYYYMM') = to_char(A.mois, 'YYYYMM')

est tout de même un peu plus simple!

merci

Hors ligne

Pied de page des forums