Vous n'êtes pas identifié(e).
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
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
Guillaume.
Hors ligne
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