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

Langage SQL Discussion :

Comment faire un group by sur un mois du 31/03 au 29/04 par exemple ?


Sujet :

Langage SQL

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    551
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2005
    Messages : 551
    Points : 260
    Points
    260
    Par défaut Comment faire un group by sur un mois du 31/03 au 29/04 par exemple ?
    Bonjour,

    J'ai une requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select MONTH(p.jour) as monthStat,count(p.fk_formation_id) AS countFormation
    from dfc_planning p
    where p.jour >= "' .$ annee . '-01-01" AND p.jour <="' . $annee . '-12-31"
    pour afficher les formations suivies dans un mois.
    Maintenant je souhaiterais la même chose, mais pour une plage du mois.
    du 31 janvier au 27 février,
    du 28 février au 30 mars
    du 31 mars au 29 avril
    etc....


    Est-ce que vous auriez un idée de comment procéder?

    Merci

    Nath

  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,

    En passant par un CASE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT CASE
       WHEN p.jour BETWEEN "' .$ annee . '-01-31" AND p.jour <="' . $annee . '-02-27" THEN 1
       WHEN p.jour BETWEEN "' .$ annee . '-02-28" AND p.jour <="' . $annee . '-03-30" THEN 2
    ...
    END AS mois
    , count(p.fk_formation_id) AS countFormation
    FROM dfc_planning p
    WHERE p.jour >= "' .$ annee . '-01-01" AND p.jour <="' . $annee . '-12-31"
    GROUP BY 1
    ORDER BY 1
    Comme vous ne précisez pas votre SGBD, je suppose que c'est MySQL (vu qu'il y a du PHP dans votre code), auquel cas la syntaxe GROUP BY 1 va fonctionner. Sinon, ça dépend un peu de votre SGBD...

  3. #3
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 115
    Points : 28 493
    Points
    28 493
    Par défaut
    Soit tu as une règle simple et générique pour définir tes plages de dates, soit tu utilises une table pour décrire ces plages et tu fais une jointure dessus :
    Periode(idPeriode, Date_Debut, Date_Fin)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT  per.idPeriode               AS idPeriode
        ,   count(pln.fk_formation_id)  AS countFormation
    FROM    dfc_planning    pln
        INNER JOIN
            periode         per
            ON  pln.pjour   BETWEEN per.date_debut  AND per.date_fin
    WHERE   pln.jour >= "' .$ annee . '-01-01" AND pln.jour <="' . $annee . '-12-31"
    GROUP BY per.idPeriode
    ;

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    551
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2005
    Messages : 551
    Points : 260
    Points
    260
    Par défaut
    super le case. merci bcp je n'y avais pas pensé !
    Je vais essayé plus tard et je reviens vous donner mon feedback.

    Merci al1_24 pour ta solution. Je l'essaierais si je m'en sors pas avec l'autre, mais l'autre solution me paraît plus simple à appliquer !

    Merci à vous 2 !

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

Discussions similaires

  1. comment faire pour que mon parseur XML n'échappe pas les carctères tels que ">" par exemple ?
    Par _LittleFlea_ dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 16/10/2009, 17h25
  2. faire un group by sur les différents niveau de code
    Par speed034 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 07/10/2004, 17h10
  3. comment faire fonctionner l'exe sur une autre machine
    Par brian79 dans le forum C++Builder
    Réponses: 8
    Dernier message: 28/05/2004, 15h00
  4. Réponses: 2
    Dernier message: 03/05/2004, 13h13
  5. Comment faire un Drag&Drop sur un tableau
    Par Stef.web dans le forum Composants VCL
    Réponses: 6
    Dernier message: 11/10/2003, 14h12

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