Regrouper date par année scolaire [Résolu]

Messages postés
132
Date d'inscription
dimanche 15 février 2009
Dernière intervention
29 octobre 2018
- - Dernière réponse : jordane45
Messages postés
23639
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 décembre 2018
- 13 sept. 2014 à 22:39
Bonjour à tous,
J'ai une base de données avec un champ date et un champ prix.

Je voudrais faire une somme des prix en regroupant les dates. Je l'ai fait pour regrouper par mois :
SELECT DATE_FORMAT(Date, '%M %Y') AS Mois, SUM(Prix) AS Ventes FROM boutique_log GROUP BY Mois 

Je voudrais maintenant regrouper par année scolaire (de août inclus à août exclu). Comment faire ça ??

Merci d'avance de votre aide.
Afficher la suite 

Votre réponse

2 réponses

Messages postés
23639
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 décembre 2018
0
Merci
Bonjour,

Là comme ça... ce qui me vient à l'esprit c'est de passer par du CASE
.. En gros dans ton SELECT tu ajoutes des CASE WHEN ... pour chaqune des années scolaires ( ..ça t'oblige à écrire "manuellement" les différentes années scolaires... mais bon... tu n'es pas obligé de créer toutes les possibilités jusqu'en 2050... à mon avis.. tu peux commencer par simplement mettre les 5 dernières (enfin.. tout dépend quand commencent les données que tu as dans ta BDD) et aller sur les 5 prochaines..... soit 10 CASE à écrire).

Un truc du genre :

SELECT   AS Ventes 
     ,CASE 
        WHEN Date BETWEEN CAST ('2012-09-01 00:00:00.000' AS DATETIME) AND CAST ('2013-09-01 00:00:00.000' AS DATETIME) THEN 1 
        WHEN Date BETWEEN CAST ('2013-09-01 00:00:00.000' AS DATETIME) AND CAST ('2014-09-01 00:00:00.000' AS DATETIME)  THEN 2 
        WHEN Date BETWEEN  CAST ('2014-09-01 00:00:00.000' AS DATETIME) AND CAST ('2015-09-01 00:00:00.000' AS DATETIME)  THEN 3 
        ELSE 4 
     END AS AnneeScolaire
FROM boutique_log


Ensuite... tu n'as plus qu'à faire ton Group By sur ce champ...
GROUP BY AnneeScolaire



Commenter la réponse de jordane45
Messages postés
132
Date d'inscription
dimanche 15 février 2009
Dernière intervention
29 octobre 2018
0
Merci
T'as réponse m'a mis sur la voie. J'ai donc fait comme ça :
SELECT IF(DATE_FORMAT(Date, '%c')<8,CONCAT(CAST(DATE_FORMAT(Date, '%Y')-1 AS CHAR),' - ',CAST(DATE_FORMAT(Date, '%Y') AS CHAR)),CONCAT(CAST(DATE_FORMAT(Date, '%Y') AS CHAR),' - ',CAST(DATE_FORMAT(Date, '%Y')+1 AS CHAR))) AS Saison, SUM(Prix) AS Ventes FROM boutique_log GROUP BY Saison


Pour un peu plus d'explications pour des éventuels intéressés :
1/ Je récupère le mois (en numérique) du champs date :
DATE_FORMAT(Date, '%c')

2/ Je teste s'il est inférieur à 8:
IF(DATE_FORMAT(Date, '%c')<8

3/ Si oui, je crée le champ Saison qui concatène (année-1) - année, en prenant soin de convertir l'année en String :
CONCAT(CAST(DATE_FORMAT(Date, '%Y')-1 AS CHAR),' - ',CAST(DATE_FORMAT(Date, '%Y') AS CHAR))

3bis/ Si non, je crée le champ Saison qui concatène année - (année+1)
CONCAT(CAST(DATE_FORMAT(Date, '%Y') AS CHAR),' - ',CAST(DATE_FORMAT(Date, '%Y')+1 AS CHAR))

4/ Et enfin je groupe par ce nouveau champ Saison créé
GROUP BY Saison
jordane45
Messages postés
23639
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 décembre 2018
-
Bonjour,
Si la question est résolue..
Merci de ne pas oublier de clôturer le sujet
(en cliquant sur le lien "Marquer comme résolu" qui se trouve sous le titre de la question)

Cordialement,
Jordane
Commenter la réponse de yoanpg

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.