Page 1 sur 1

moyenne de durée/ date

Posté : 24 juin 2005, 09:44
par goth
bonjour tlm,
j'ai une table dont le schéma est le suivant :

Code : Tout sélectionner

CREATE TABLE `connexion` ( `idcab` varchar(20) NOT NULL default '', `datedebut` date NOT NULL default '0000-00-00', `heuredebut` time NOT NULL default '00:00:00', `heurefin` time default NULL, PRIMARY KEY (`idcab`,`datedebut`,`heuredebut`) )
ca représente des connexion/deconnexion au site.
J'aimerais faire une moyenne des durée :
j'arrive a faire :
SELECT idcab, timediff(heurefin,heuredebut) FROM connexion
qui me renvoie la durée d'une connexion

mais ce que je voudrais faire c'est quelque chose comme :
SELECT idcab, avg(timediff(heurefin,heuredebut)) FROM connexion group by idcab
mais avg n'a pas l'air de marcher sur les dates.

Mais comment faire! (je suis pret a revoir totalement ma table et ses champs si vous pensez que ce n'est pas le plus judicieux)

Posté : 24 juin 2005, 10:03
par ouckileou
effectivement c'est possible que tu ne puisses pas faire une moyenne directement sur une date

une solution pourrait être de transformer en entier (timestamp), faire ta moyenne avec AVG() puis reformater ensuite

je vois ça par exemple :
UNIX_TIMESTAMP()
Si UNIX_TIMESTAMP() est appelé avec un argument date , elle retourne le timestamp correspondant à cette date

ça pourrait peut-être faire ce que tu veux

tu sélectionnes les deux timestamp, tu fais la différence, puis la moyenne de ces différences puis tu reformates

ce n'est qu'une idée à creuser éventuellement, c'est peut-être un peu tordu :)

Posté : 24 juin 2005, 11:02
par goth
merci c'est pas exactement ca mais ca m'a bien mis sur la voie.

donc avec le meme schéma que ci dessus, pour faire une moyenne des durée de connexion on peut faire :

Code : Tout sélectionner

select idcab, avg(time_to_sec(timediff(heurefin,heuredeb))) from connexion group by idcab
ca renvoir la moyenne en seconde donc il faut voir à reformatter la chose.

je sais pas si c tordu mais à priori ca marche

(au passge on peut peu etre rajouter un where heurefin is not null mais a priori ca change pas le résultat des test

thx ouckileou

Posté : 24 juin 2005, 12:02
par pjl
[RESOLU] alors ?

Posté : 24 juin 2005, 12:29
par goth
Voila c ma solution final :

select idcab, sec_to_time(avg(time_to_sec(timediff(heurefin,heuredeb)))) from connexion2 group by idcab

Posté : 24 juin 2005, 12:30
par zeus
Pense à cliquez sur le bouton [RESOLU] qui se trouve en haut à gauche au dessus des topics

merci