IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

Optenir un temps moyen d'intervalle de création


Sujet :

Requêtes MySQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11
    Points : 7
    Points
    7
    Par défaut Optenir un temps moyen d'intervalle de création
    Bonjour à tous,

    En temps normal je me débrouille tout seul comme un grand mais là j'avoue que je commence à être à court d'idée.
    Je vous expose mon problème.

    J'ai une table contenant des clients (1 entrée = 1 client) et pour chaque client j'ai une date de création sous la forme d'un datetime.

    Je voudrai pouvoir récupérer un temps moyen d'écart entre les dates de créations de chacun d'entre eux. Histoire de pouvoir me sortir une stat du genre "un client a été crée toutes les 8 minutes en moyenne entre la date X et la date Y"

    J'ai regardé pas mal de trucs, il y a timediff(t1, t2) qui collerait bien, mais il implique d'avoir 2 dates a convertir en time sur un champ, chose que je n'ai pas.

    J'ai aussi tenté de récupérer l'enregistrement précédent et de faire un timediff mais c'est moyen et ne retourne pas ce que je veux et dans tous les cas je devrai passer le tout à un AVG() pour faire une moyenne... je dois pas lui poser la bonne question.

    Quelqu'un aurait une idée de requete pour moi ?

    Merci

  2. #2
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Saluton,
    Je pense à quelque chose comme ça
    Code mysql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT AVG(TIMEDIFF(c.creation,
                        (SELECT creation 
                         FROM clients 
                         WHERE creation > c.creation 
                         ORDER BY creation 
                         LIMIT 1)
                        )
               )
    FROM clients c
    Le problème va concerner le dernier client entré pour lequel la sous-requête ne retournera pas de valeur.
    Et donc soit il y a un message d'erreur, soit AVG retounera une valeur décalée
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  3. #3
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Par ailleurs, je ne suis pas sûr que AVG sache travailler sur le résultat de TIMEDIFF.
    Il faut probablement le convertir en secondes avec TIME_TO_SEC.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Salutations et merci du message

    Bizarre, j'avais testé de passer par une sous requete mais la partie "WHERE creation > c.creation" ne fonctionnait pas, j'arrivais pas à lui donner la valeur de c.creation. Peut être parce que ma sous requete était au niveau de ma jointure et pas directement dans le select.

    J'ai fais mes tests et comparé avec des données calculées à la main et tout roule, merci bien.

    Un exemple de requetes essayée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT (AVG(TIMEDIFF(c.crea_date,
                        (SELECT crea_date 
                         FROM clients__tech 
                         WHERE crea_date >= c.crea_date 
    			AND client_id != c.client_id 
                         ORDER BY crea_date ASC 
                         LIMIT 1)
                        )
               ) / 60) as minutes 
    FROM clients__tech c
    WHERE client_id >= 744
    Qui me retourne bien un :
    8.02820512820513
    C'est tout ce que je voulais. Merci beaucoup

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. STOCK : Intervalle de temps moyen entre sortie/entrée
    Par celinetcie dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 01/11/2014, 20h40
  2. Réponses: 7
    Dernier message: 08/11/2009, 16h10
  3. Réponses: 5
    Dernier message: 30/10/2009, 16h10
  4. [AC-2000] Access Temps moyen
    Par Flo90 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 16/04/2009, 12h45
  5. calculer la temps moyen entre deux dates
    Par zainabsourid dans le forum BIRT
    Réponses: 1
    Dernier message: 24/07/2006, 12h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo