un peu plus de précision :
j'utilise les fonction OCI de la librairie php pour me connecter à Oracle.
Il se trouve que c'est réel, il faut du temps (5s) pour que la requête soit effectuée. Je ne sais pas d'où ça vient mais je n'ai pas beaucoup de droits sur la base, je dois m'en contenter.
j'ai une simple table contenant les champs suivant :
Code : Tout sélectionner
create table matable(
id integer,
nom varchar,
dateheuredebut date,
dateheurefin date);
A savoir que pour un même
nom il peut y avoir plusieurs enregistrement différents avec donc des
id différents.
J'essaie d'avoir la durée maximale par nom et la durée moyenne.
J'ai donc cette requête pour la durée maximale de chaque nom:
Code : Tout sélectionner
SELECT nom,
SUBSTR ((TO_CHAR (MAX(dateheurefin - dateheuredebut), 'HH24:MI:SS')), 12, 8 ) dureemax,
FROM matable
GROUP BY nom
ORDER BY dureemax DESC
Par contre il me faut également la durée moyenne, et là après quelques tentatives, je ne vois pas comment l'intégrer à la requête en SQL. Une deuxième requête doublerait le temps d'execution donc ce n'est pas envisageable.
Voivi au cas où mon code pour effectuer la requête :
function topx_max($nb,$debut,$fin){
$resultat = array();
$connexion = @ocilogon(***,***,***);
if($connexion == false){
$msg = ocierror();
print_r($msg);
$erreur = $msg['code'];
}
else{
$requete =
"SELECT nom,
SUBSTR ((TO_CHAR (MAX(dateheurefin - dateheuredebut), 'HH24:MI:SS')), 12, 8 ) dureemax,
FROM matable
GROUP BY nom
ORDER BY dureemax DESC";
//echo $requete.'<BR><BR>';
$gestionnaire_requete = ociparse($connexion,$requete);
if (!$gestionnaire_requete) {
$e = OCIError($connexion).'<BR>';
print htmlentities($e);
$tablespaces = false;
}
else{
$r = ociexecute($gestionnaire_requete,OCI_DEFAULT);
if (!$r) {
$e = OCIError($gestionnaire_requete).'<BR>';
echo htmlentities($e);
$tablespaces = false;
}
else{
while (OCIFetchInto($gestionnaire_requete, $ligne, OCI_ASSOC) ) {
//print_r($ligne);echo '<BR>';
//$resultat[$ligne['NOM']] = $ligne;
}
}
}
OCILogoff($connexion);
}
return $resutat;
}