OVH Cloud OVH Cloud

Running Sum dans une requête

2 réponses
Avatar
Patrick Lauzon
Bonjour,
=20
Je cherche =E0 faire un RUNNING SUM dans une requ=EAte. La=20
somme est bas=E9 sur le dernier jour de la semaine et par=20
mois dans la m=EAme requ=EAte.

Est-ce que quelqu'un a une solution S.V.P.

Merci=20

Patrick

2 réponses

Avatar
Michel Walsh
Salut,



SELECT a.item, MAX(a.ladate), SUM(b.lesValeurs)
FROM quelquePart As a INNER JOIN quelquePart As b
ON ( a.laDate >= b.laDate ) AND ( a.item=b.item )
GROUP BY a.item, Datepart( "yyyy", a.laData) , Datepart("ww", a.ladate)


Espérant être utile,
Vanderghast, Access MVP





"Patrick Lauzon" wrote in message
news:094201c3c002$f5540e20$
Bonjour,

Je cherche à faire un RUNNING SUM dans une requête. La
somme est basé sur le dernier jour de la semaine et par
mois dans la même requête.

Est-ce que quelqu'un a une solution S.V.P.

Merci

Patrick
Avatar
Michel Walsh
Salut,



J'aurais dû illustrer le fonctionnement.

Admettons:


Ladate, LaValeur ' champs
1 12
2 11
3 7
4 15
5 9




La jointure implique deux fois la même table, une fois avec alias a et une
fois avec alias b. Sans joint interne,

FROM maTable As a, maTable As b


on obtient


a.LaDate b.LaDate
1 1
1 2
1 3
1 4
1 5
2 1
2 2
2 3
2 4
2 5
3 1
3 2
3 3
3 4
3 5
4 1
4 2
4 3
4 4
4 5
5 1
5 2
5 3
5 4
5 5



La jointure interne utilisée (si on fait abstration de a.item = a.item,
disons qu'on n'a qu'un seul item, pour simplifier) demande a.LaDate > b.LaDate. On ne garde que les combinaisons qui respectent ce critère:


a.LaDate b.LaDate
1 1
2 1
2 2
3 1
3 2
3 3
4 1
4 2
4 3
4 4
5 1
5 2
5 3
5 4
5 5

Notons que le champ b.LaValeur, non illustré, suit également (c'est tout le
record qui est "retenu" ou "éliminé").

Maintenant, si on regroupe sur a.LaDate, on remarque que, effectivement, les
enregistrements conservés de b, pour chaque groupe, correspondent aux
données "jusqu'à maintenant" considérées par a.LaDate. Donc, SUM(b.LaValeur)
fourni notre somme jusqu'à la date a.laDate.

Dans note cas, on ne veut pas par date, mais par semaine, d'où


GROUP BY Datepart( "yyyy", a.laDate) , Datepart("ww", a.laDate)




Espérant être utile,
Vanderghast, Access MVP