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 éclairé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    551
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2005
    Messages : 551
    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 067
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loiret (Centre)

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 067
    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...
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  3. #3
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    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 139
    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
    ;
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 551
    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