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

SQL Procédural MySQL Discussion :

statistique: group by ?


Sujet :

SQL Procédural MySQL

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 225
    Par défaut statistique: group by ?
    bonjour,

    voila je n'arrive pas a faire une requete et me demande si c'est possible à faire en 1 seule ou s'il faudrait stocker des resultats intermediaires.
    j'ai une table enregistrant les demandes utilisateurs avec, entre autres , les champs suivants :
    id_demande
    lib_demande
    date_post
    date_close

    ce que je souhaiterai faire c'est un peu de statistique et connaitre le pourcentage de demandes resolues en 1jour, 2j, 3j,4j et 5j et plus.
    (j'utilise la version mysql 4.0.15 , je ne peux pas utiliser les fonctions de date tq date_diff, je passe donc par des date_add pour faire mes differences de date : date_format(date_add(date_post, interval 1 day),'%d%m%y'')) >= date_format(date_close,'%d%m%y')

    je ne sais pas par quel bout commencer, les qques group by que j'ai fait me donne des resultats un peu bizarre.

    merci de votre aide,

    NL

  2. #2
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Par défaut Re: statistique: group by ?
    Tout d'abord, je vais corriger un point: c'est très bien d'utiliser un DATE_ADD, mais tu peux l'utiliser beaucoup plus simplement.

    Au lieu de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    date_format(date_add(date_post, interval 1 day),'%d%m%y'')) >= date_format(date_close,'%d%m%y')
    Tu peux faire tout simplement ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    date_add(date_post, interval 1 day) >= date_close
    ... C'est plus clair et plus rapide.


    Sinon, moi aussi jai rencontré ce problème d'absence de DATE_DIFF lié à MySQL 4.0 (tu ne serais pas sous EasyPHP 1.7, par hasard? )

    Tu peux éventuellement essayer de compenser avec un UNIX_TIMESTAMP. Cette fonction te retournera le nombre de secondes écoulées depuis l'"epoch" (1970/01/01 00:00:00). En faisant une soustraction une division par le nombre de secondes dans une journée (86400) et un arrondi (FLOOR), tu obtiens le nombre de jours.

    Par contre il y a un problème: UNIX_TIMESTAMP retourne un entier 'unsigned' et tu as parfois de mauvaises surprises quand tu soustrais deux entiers non signés (dépassement de capacité), même en faisant un:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CAST(UNIX_TIMESTAMP(date_post) AS SIGNED)
    Tu peux donc essayer de faire un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT *,
     FLOOR(
       ( CAST(UNIX_TIMESTAMP(date_close) AS SIGNED)
       - CAST(UNIX_TIMESTAMP(date_post)  AS SIGNED))
       / 86400
     ) AS NbJours
     
    (...)
     
    GROUP BY NbJours
    ... mais je doute que ça marche du premier coup !

    (et encore, là j'ai même pas pris en compte le cas où date_close est NULL...)
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 225
    Par défaut
    re,

    merci de ta reponse :
    beaucoup plus simple en effet ta façon de faire des soustractions de date;
    (le date_format c'etait pour moi , pour y voir plus clair.. ;-))
    les date_close à null donnent des resultats aberrants , ce qui est normal;
    de toute façon je ne les prend pas en compte ;
    je rajoute un count(*) à la requete et je peux enfin exploiter mes resultats:
    SELECT lib_service, date_post, date_close, FLOOR( (
    CAST( UNIX_TIMESTAMP( date_close ) AS SIGNED ) - CAST( UNIX_TIMESTAMP( date_post ) AS SIGNED ) ) / 86400
    ) AS NbJours, count( * )
    FROM service
    WHERE date_close IS NOT NULL
    GROUP BY NbJours

    merci de ton aide,
    NL

  4. #4
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Par défaut
    Personnellement, je ne pensais pas que ça marcherait (et j'emets encore de nombreuses réserves, ayant été moi-même confronté à ce problème), alors je n'ai pas voulu aborder la question du COUNT. En plus, je ne savais pas exactement quel genre de statistiques tu voulais (ça aurait aussi bien pu être le nombre de jours moyen avant une réponse).

    J'espère que ça marchera bien, mais je préfère rester prudent à ce sujet.
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 225
    Par défaut
    re,

    l'objectif est de faire des stats graphique (camembert) dans lequel je presente en pourcentage le delai d'intervention (pour les demandes traité : date_close non null); ce qui donne par exemple :
    35.2% des demandes resolus en 15 jours
    12.5% des demandes resolus en 5 jours
    etc...
    d'apres ce que j'ai en base de test, il n'ya pas d'erreur,
    peux tu me dire ou resident tes doutes quant à tes reserves (ca m'interresse : je ne veux pas presenter des resultats erronés)

    merci,

    NL+

  6. #6
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Par défaut
    Mes doutes concernent le:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ( CAST(UNIX_TIMESTAMP(date_close) AS SIGNED)
    - CAST(UNIX_TIMESTAMP(date_post)  AS SIGNED))
    J'ai eu quelques soucis de par le passé en essayant de faire une soustraction d'entiers non signés (même avec un CAST explicite). Si un jour ça t'affiche que certaines personnes ont eu leur problème résolu au bout de 16478953256877452 jours, là le problème sera évident.

    Maintenant, si tu as fais un test et que ça marche, il ne devrait pas y avoir de problèmes (c'est peut-être moi qui ait fait une bêtise en faisant la soustraction, toujours est-il que j'ai résolu mon problème depuis).

    Sinon, tu utilises quoi comme outil pour générer ton camembert? Un jour, quelqu'un m'a conseillé jpgraph, mais je n'ai pas eu l'occasion de l'essayer:
    http://www.aditus.nu/jpgraph/
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 225
    Par défaut
    bonjour,


    pour faire les graph j'utilise la librairie GD de PHP.
    j'ai trouvé une classe tres bien dans un o'reilly "PHP en action" (utilisant GD),
    j'ai adapté la classe pour faire des sauvegardes des images générée à la volée, mis à par ce detail , elle est tres bien.

    voilou,

    NL

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 28/02/2014, 14h12
  2. [MySQL-5.6] Des statistiques avec mySQL (AVG et GROUP BY)
    Par boubil dans le forum Requêtes
    Réponses: 1
    Dernier message: 16/02/2014, 10h23
  3. [WD18] Statistiques ages par groupe d'age
    Par wd_newbie dans le forum WinDev
    Réponses: 7
    Dernier message: 14/02/2014, 23h30
  4. Réponses: 2
    Dernier message: 25/06/2010, 05h41
  5. [AC-2000] utilisation d'un groupe d'option pour faire des statistiques
    Par guaguanco dans le forum IHM
    Réponses: 1
    Dernier message: 23/06/2010, 18h55

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