Regrouper date par année scolaire

Résolu
yoanpg Messages postés 157 Date d'inscription dimanche 15 février 2009 Statut Membre Dernière intervention 29 avril 2024 - 10 sept. 2014 à 14:06
jordane45 Messages postés 38241 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 septembre 2024 - 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.

2 réponses

jordane45 Messages postés 38241 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 septembre 2024 345
10 sept. 2014 à 15:33
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



0
yoanpg Messages postés 157 Date d'inscription dimanche 15 février 2009 Statut Membre Dernière intervention 29 avril 2024 3
Modifié par yoanpg le 11/09/2014 à 10:18
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
0
jordane45 Messages postés 38241 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 septembre 2024 345
13 sept. 2014 à 22:39
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
0
Rejoignez-nous