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 :

Statistique mensuelle, rupture de séquence d'un mois


Sujet :

Requêtes MySQL

  1. #1
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut Statistique mensuelle, rupture de séquence d'un mois
    Bonjour,

    Je fais une requête pour des statistiques mensuels :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT MID(cmd_event_date_fait, 1, 4) AS 'Annee',
    				MID(cmd_event_date_fait, 6, 2) AS 'Mois',
    				SUM(cmd_lig_qte) AS 'quantite'
    				FROM stat_detail
    WHERE  cmd_event_date_fait >= '".$date_debut."'
    				AND cmd_event_date_fait <= '".$date_fin."'
    				GROUP BY MID(cmd_event_date_fait, 1, 7)
    				ORDER BY MID(cmd_event_date_fait, 1, 7)
    Le tableau résultat de ma requête est ensuite présenté dans un formulaire.

    Dans le résultat, je n'ai pas de mois d'avril 2007 parce qu'il n'y a eu aucun mouvement ce mois là. C'est donc normal.

    Mais dans mon formulaire , compte tenu de ma façon de faire, j'ai un décalage du fait de l'absence d'avril. C'est à dire que le mois de mai se cale en position 4 et ainsi de suite pour les mois suivant.

    J'ai le choix soit de modifier l'alimentation de mon formulaire, soit et c'est ce que je souhaiterai modifier ma requête si c'est possible.

    Est-il possible dans la requête d'ajouter, le mois ou les mois manquant pour garder la séquence des mois sans interruption ?

    Merci d'avance

  2. #2
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 040
    Points : 23 795
    Points
    23 795
    Par défaut
    Bonjour,

    C'est faisable dans la requête, à condition de faire une jointure à gauche sur une table (temporaire) avec 12 lignes (comportant le nombre de 1 à 12).
    Mais sincèrement, on est plus dans la mise en forme de données, et le SQL n'est pas prévu pour ça... Il est préférable de modifier le traitement après avoir récupéré les données de la requête.

    ced

  3. #3
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut
    Merci Ced.

    C'est ce que j'ai fini par faire.

  4. #4
    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 : 73
    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 ne sais pas pourquoi, j'étais persuadé que MySQL proposait les fonctions YEAR() et MONTH().
    Mais j'ai du rêver.

  5. #5
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut
    Citation Envoyé par Maljuna Kris Voir le message
    Saluton,
    Je ne sais pas pourquoi, j'étais persuadé que MySQL proposait les fonctions YEAR() et MONTH().
    Mais j'ai du rêver.
    Mais encore ???

    Je suis intéressé par l'usage de ces fonctionnalités pour le cas qui m'intéresse.

  6. #6
    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 : 73
    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
    Eh bien, si la colonne `cmd_event_date_fait`est de type DATE ou DATETIME ou TIMESTAMP, MONTH(cmd_event_date_fait) retourne le mois date et YEAR(cmd_event_date_fait) l'année.
    De la même façon, DATE_FORMAT(cmd_event_date_fait,'%Y%m') retourne l'année et le mois concaténés.

  7. #7
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut
    Oui cmd_event_date_fait est de type DATE

    Donc ça donnerait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT YEAR(cmd_event_date_fait) AS 'Annee',
    MONTH(cmd_event_date_fait) AS 'Mois',
    				SUM(cmd_lig_qte) AS 'quantite'
    				FROM stat_detail
    WHERE  cmd_event_date_fait >= '".$date_debut."'
    				AND cmd_event_date_fait <= '".$date_fin."'
    				GROUP BY MID(cmd_event_date_fait, 1, 7)
    				ORDER BY MID(cmd_event_date_fait, 1, 7)
    Ok pour la requête, mais pour ma question, cela ne change rien.

  8. #8
    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 : 73
    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
    Citation Envoyé par lodan Voir le message
    Oui cmd_event_date_fait est de type DATE
    Donc ça donnerait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    GROUP BY MID(cmd_event_date_fait, 1, 7)
    ORDER BY MID(cmd_event_date_fait, 1, 7)
    Ces deux-là aussi peuvent-être remplacés DATE_FORMAT(cmd_event_date_fait,'%Y%m')

  9. #9
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut
    Merci.

    C'est plus propre ?

    Plus rapide en exécution ?

    Plus In que ce que j'avais écrit ?

  10. #10
    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 : 73
    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
    Citation Envoyé par lodan Voir le message
    Merci.

    C'est plus propre ?

    Plus rapide en exécution ?

    Plus In que ce que j'avais écrit ?
    ça n'est pas sous cet angle que je vois les choses.
    Si une colonne est de type date, autant prendre l'habitude d'utiliser les fonctions dédiées à ce type de colonne pour les manipuler.
    Si réserves il doit y avoir, ce serait pour des fonctions qui ne figureraient pas au standard SQL.

  11. #11
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut
    Merci pour ces conseils

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

Discussions similaires

  1. Calcul de statistiques mensuelles
    Par donbrico dans le forum Langage SQL
    Réponses: 4
    Dernier message: 30/01/2008, 15h27
  2. Exception:Extraction en rupture de séquence
    Par romano dans le forum JDBC
    Réponses: 1
    Dernier message: 28/02/2007, 11h42
  3. Instruction de rupture de séquence itérative avec XSL
    Par peak dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 11/08/2005, 15h32

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