2017-10-09 1 views
1

Par exemple, j'ai la table ci-dessousMySQL roulement SUM

DATE  QUANTITY 
9/10/2017  3 
9/10/2016  5 
9/03/2015  6 
9/10/2017  2 
8/10/2017  9 

Et je veux que le résultat final ressemble ci-dessous

YEAR MONTH ROLLING SUM SUM 
2015  03   6   6 
2016  10   11  5 
2017  10   25  14 

Pour obtenir la somme que j'utilise le code suivant

SELECT YEAR(Date),MONTH(Date),SUM(QUANTITY) 
FROM table 
GROUP BY YEAR(Date),MONTH(Date); 

Est-il possible d'ajouter la somme cumulative à la même requête? En second lieu: En ce moment j'utilise MySQL mais l'environnement final que ces requêtes exécuteront est AWS Athena. Et je me demandais s'il y avait un moyen terme entre les deux pour tester ces requêtes.

+0

Vous pouvez utiliser un JOIN. – Strawberry

Répondre

0

Dans la plupart des bases de données, vous pouvez utiliser les fonctions de la fenêtre:

SELECT YEAR(Date), MONTH(Date), SUM(QUANTITY), 
     SUM(SUM(QUANTITY)) OVER (ORDER BY YEAR(DATE), MONTH(DATE) 
FROM table 
GROUP BY YEAR(Date),MONTH(Date); 

MySQL, je recommande une sous-requête corrélative:

SELECT YEAR(Date), MONTH(Date), SUM(QUANTITY), 
     (SELECT SUM(t2.QUANTITY) 
     FROM table t2 
     WHERE YEAR(t2.Date) < YEAR(t.Date) OR 
       (YEAR(t2.Date) = YEAR(t.Date) AND MONTH(t2.Date) <= MONTH(t.date)) 
     ) as rolling_sum 
FROM table t 
GROUP BY YEAR(Date), MONTH(Date); 
+0

Merci, ça a bien fonctionné dans les deux cas! –