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

Messages postés
137
Date d'inscription
dimanche 15 février 2009
Statut
Membre
Dernière intervention
21 janvier 2019
- - Dernière réponse : jordane45
Messages postés
26089
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
12 août 2019
- 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 

2 réponses

Messages postés
26089
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
12 août 2019
313
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
137
Date d'inscription
dimanche 15 février 2009
Statut
Membre
Dernière intervention
21 janvier 2019
3
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
26089
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
12 août 2019
313 -
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