Hello,
Problème (simplifié) :
Une table contenant des clients.
Une table contenant une clé client_id, un champ date et un champ montant
Lorsqu'un client verse un montant, une entrée est générée dans la 2e table.
Je veux récupérer le montant total versé par un client X jusqu'au jour J.
Dans la même requête, je dois avoir le montant total versé jusqu'au jour J-1an.
Requête (base de donnée Firebird 2) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 SELECT c.client_id, SUM(p1.montant) as MT1, SUM(p2.montant) as MT2 FROM CLIENT c LEFT JOIN PAIEMENT p1 ON p1.client_id = c.client_id AND p1.dt_pai <= '01.01.07' LEFT JOIN PAIEMENT p2 ON p2.client_id = c.client_id AND p2.dt_pai <= '01.01.06' WHERE c.client_id = 'ZZZ' GROUP BY c.client_id
Ce qui ne joue pas :
La valeur de MT1 et MT2 est toujours identique (et ne correspond pas aux montants réels). Comment le moteur de base de données traduit cette requêtes ? En quoi est-elle fausse ? Merci de vos réponses...
Partager