Bonjour tout le monde !
Mon problème d'aujourd'hui résulte dans l'imbrication de plusieurs fonctions. Ces fonctions imbriquées fonctionnent très bien dans ma requête mais cependant (fallait s'y attendre...) certains résultats sortent 'NULL'.
SGBD : MySQL
Bon je vous donne les détails de mes tables :
-- Structure de la table `dureejob`
-- Structure de la table `job`
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 CREATE TABLE IF NOT EXISTS `dureejob` ( `idDureeJob` int(11) NOT NULL auto_increment, `Traitement_idTraitement` int(10) NOT NULL, `Job_idJob` int(11) NOT NULL, `Debut` datetime default NULL, `Fin` datetime default NULL, `Temp` time default NULL, PRIMARY KEY (`idDureeJob`), KEY `DureeJob_FKIndex1` (`Job_idJob`), KEY `DureeJob_FKIndex2` (`Traitement_idTraitement`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=8103 ;
-- Ma requête qui fonctionne (ou plutôt qui m'affiche des résultats) !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 CREATE TABLE IF NOT EXISTS `job` ( `idJob` int(11) NOT NULL auto_increment, `Jobset_idJobset` int(11) NOT NULL, `NomJob` varchar(30) default NULL, `Description` varchar(200) default NULL, PRIMARY KEY (`idJob`), KEY `Job_FKIndex1` (`Jobset_idJobset`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=12918 ;
-- Explication de la requête :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 SELECT COUNT(Job_idJob), Job.idJob, Job.NomJob, SUBSTR(Debut,1,7), SUBSTR(cast(Avg(Temp) AS TIME),1,8) FROM DureeJob INNER JOIN Job ON DureeJob.Job_idJob=Job.idJob AND job.nomjob LIKE '%-%D-%' GROUP BY SUBSTR(DEBUT,1,7), job_idjob ORDER BY SUBSTR(Debut,1,10) ASC
SELECT
1. Compte du nombre de Jobs similaires composants la moyenne
2. ID du groupe de Job (Jobs composants la moyenne donc ayant le même ID)
3. Debut est à la base un champ DATETIME, je sélectionne que le XXXX-XX
4. Temp étant un champ de type TIME et voulant faire des moyenne j'écarte les ',XXXX' pour que je ne puisse pas avoir de TIME XX:XX:XX,XXXXX
FROM
DureeJob --> Job sur DureeJob.Job_idJob=Job.idjob
Et je sélectionne uniquement les Jobs contenant la lettre D à un certain endroit du mot
But de la requête :
Ce que j'attends de cette requête est simple, faire la moyenne du champ 'Temp' (sous la forme XX:XX:XX) des Jobs de même ID par Année-Mois, contenant la lettre D (à une certaine position) en faisant apparaitre le nombre de Jobs qui composent la moyenne, l'ID du groupe de même Jobs et leurs Noms (Même IDs --> Même Noms)
Extrait du résultat de la requête :
COUNT(Job_idJob) idJob NomJob SUBSTR(Debut,1,7) SUBSTR(cast(Avg(Temp) AS TIME),1,8)
Alors on voit qu'il y a des moyennes à 00:00:00 (normal ce sont des jobs qui ont pris moins d'une seconde à s'exécuter) et des groupes de Jobs NULL.2 6875 PRRCI-009D-050D 2009-07 NULL
9 11312 POXYZ-912D-010D 2009-06 NULL
1 12750 PRTLZ-TSTD-015D 2009-07 00:00:00
1 11518 PREPF-100D-265D 2009-06 00:00:00
1 11191 PICVZ-TSTD-005D 2009-06 00:00:00
1 11462 PREJZ-TSTD-020D 2009-06 00:00:00
Ce qu'il faut savoir c'est que parmi ces groupes, aucun des jobs qui les composent sont de valeurs NULL.
Autre Piste, la ligne
à une petite sœur :9 11312 POXYZ-912D-010D 2009-06 NULL
Cependant, quand je les regroupent (je ne les tris plus par Années/Mois), le résultat NULL n'apparait plus et cela donne une ligne de style :1 11312 POXYZ-912D-010D 2009-07 00:00:00
Pour précision : quand dans ma requête je ne CAST plus en TIME, le résultat n'est plus NULL et cela donne :10 11312 POXYZ-912D-010D 2009 00:34:00
Requête :
Résultat :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 SELECT COUNT(Job_idJob), Job.idJob, Job.NomJob, SUBSTR(Debut,1,7), Avg(Temp) FROM DureeJob INNER JOIN Job ON DureeJob.Job_idJob=Job.idJob AND job.nomjob LIKE '%-%D-%' GROUP BY SUBSTR(DEBUT,1,7), job_idjob ORDER BY COUNT(Job_idJob) DESC
COUNT(Job_idJob) Décroissant idJob NomJob SUBSTR(Debut,1,7) Avg(Temp)
A noter qu'il n'y a plus aucun résultats en 'NULL' mais que le résultat de la première ligne est à 61,8. Je me demande donc si le NULL ne viens pas de l'incompatibilité de 61,8 minutes dans un format TIME ??9 11312 POXYZ-912D-010D 2009-06 61.8888888888889
7 1678 PDACI-TSTD-060D 2009-07 4
7 1681 PDACI-TSTD-090D 2009-07 2.57142857142857
7 1677 PDACI-TSTD-050D 2009-07 3.85714285714286
Si quelqu'un voit une solution à mon problème ça serait Top Moumoute !
Merci d'avance à tout le monde !
Partager