Bonjour,


Je souhaiterais réaliser des groupements de mesures par jour et par identifiant de métier pour lesquelles la date est comprise entre l'heure_début et l'heure_fin associée au métier.

---> aggrégation de mesures à la journée, par métier


MESURE_METIER_CV

VALEUR FLOAT,
DATE_MES DATE not null,
PERFORMANCE FLOAT,
FREQ_MES VARCHAR2(1) not null, (Q=quart d'heure, J= jour)
IDMETIER NUMBER not null,
INDISPO FLOAT

clé primaire : (DATE_MES,IDMETIER,FREQ_MES)

METIERS

IDMETIER NUMBER not null,
NOM_METIER VARCHAR2(50),
HEURE_DEBUT DATE,
HEURE_FIN DATE


clé primaire : IDMETIER

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
 
select t.IDMETIER, AVG(t.PERFORMANCE), SUM(t.indispo)
, AVG(t.VALEUR) AS MOY_VAL, TO_date(t.DATE_MES, 'dd/mm/yyyy')
, 'J' AS TYPE_MES
from MESURE_METIER_CV t,METIERS a
where (
a.idmetier=t.idmetier
and
FREQ_MES ='Q' 
and 
to_char(t.date_mes,'hh24:mi:ss')>=to_char(a.heure_fin,'hh24:mi:ss')
and  
 to_char(t.date_mes,'hh24:mi:ss')<=to_char(a.heure_fin,'hh24:mi:ss'))
GROUP BY (t.IDMETIER, to_date(t.DATE_MES, 'dd/mm/yyyy'))
;
la requête fonctionne presque (donc pas du tout ).

Pour certains jours les aggrégations ne sont pas faites .... pourtant il y a des mesures qui se situent dans les heures d'ouverture du métier je ne comprend pas...

et si je met un COUNT(*) pour compter le nombre d'éléments qui ont servi a ce regroupement

c'est à dire le nombre de mesures qui ont servi a mesuré la journée pr un métier j'obtiens systématiquement 1 !!!
alors que j'ai entre 30 et 48 mesure par jour par métier.

j'en déduis que le group by de ma requete ne fait pas ce que je pense qu'il fait...

Il doit y avoir une subtilité du group by que je n'ai pas saisi


merci bcp à ceux qui se pencheront sur mon petit soucis

Charly