JeuWeb - Crée ton jeu par navigateur
[SQL] Problème de consolidation - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : [SQL] Problème de consolidation (/showthread.php?tid=7005)



[SQL] Problème de consolidation - Myrina - 28-06-2013

J'ai une table X(jour,valeur) où j'ai pour chaque jour une valeur.
Je peut monétiser cette valeur (montant=PU*valeur).
Le prix unitaire (PU) est fixé par intervalle de dates; Entre date1 et date2, il vaut par exemple 5 et entre date2 et (date non encore connue), il vaut 3,5.

Je n'ai pas encore structuré la table contenant les PU car j'aimerai pouvoir calculer en SQL la valeur monétisée totale en tenant compte de la variabilité du PU par période (SELECT SUM(valeur*PU)...)

J'ai bien quelques pistes mais rien en pur SQL, donc je recherche d'autres idées.


RE: [SQL] Problème de consolidation - Roworll - 01-07-2013

Tu peux donner un ou deux exemples concrets ?
Là, j'avoue n'avoir qu'une très vague idée du problème.
J'ai du mal à voir ta structure actuelle, ce que tu souhaites exactement faire et surtout, à quoi cela va te servir.


RE: [SQL] Problème de consolidation - Myrina - 01-07-2013

Donc chaque jour, j'ai une valeur:
Code :
01/06/13    100
02/06/13    100
03/06/13    100
04/06/13    100
05/06/13    100
06/06/13    100
07/06/13    100
08/06/13    100
09/06/13    100
10/06/13    100
11/06/13    100
12/06/13    100
13/06/13    100
14/06/13    100
15/06/13    100
16/06/13    100
17/06/13    100
18/06/13    100
19/06/13    100
20/06/13    100
21/06/13    100
22/06/13    100
23/06/13    100
24/06/13    100
25/06/13    100
26/06/13    100
27/06/13    100
28/06/13    100
29/06/13    100
30/06/13    100
01/07/13    100
Disons que le prix unitaire est de 5.
Le 15/06/13, le PU change à 3,5.
Le 26/06/13, le PU change à 10.
Ce qui donne alors:
Code :
01/06/13    100    500,00 €
02/06/13    100    500,00 €
03/06/13    100    500,00 €
04/06/13    100    500,00 €
05/06/13    100    500,00 €
06/06/13    100    500,00 €
07/06/13    100    500,00 €
08/06/13    100    500,00 €
09/06/13    100    500,00 €
10/06/13    100    500,00 €
11/06/13    100    500,00 €
12/06/13    100    500,00 €
13/06/13    100    500,00 €
14/06/13    100    500,00 €
15/06/13    100    350,00 €
16/06/13    100    350,00 €
17/06/13    100    350,00 €
18/06/13    100    350,00 €
19/06/13    100    350,00 €
20/06/13    100    350,00 €
21/06/13    100    350,00 €
22/06/13    100    350,00 €
23/06/13    100    350,00 €
24/06/13    100    350,00 €
25/06/13    100    350,00 €
26/06/13    100    1 000,00 €
27/06/13    100    1 000,00 €
28/06/13    100    1 000,00 €
29/06/13    100    1 000,00 €
30/06/13    100    1 000,00 €
01/07/13    100    1 000,00 €
L'affectation du bon PU selon la date est faisable en Php, mais j'aimerai pouvoir le faire en SQL directement.

Et l'utilité finale, c'est de connaitre le total (16 850,00 € dans l'exemple)


RE: [SQL] Problème de consolidation - Roworll - 01-07-2013

J'ai peut être pas tout compris mais ça ne me semble pas si compliqué.

Donc tu as une première table disons Historique_Valeur avec deux colonnes
- Date_Valeur
- Montant_Valeur

Ensuite, tu as une 2e table historique_PU avec 3 colonnes
- Date_Debut
- Date_Fin
- Montant_PU

Sauf erreur, il suffit simplement de joindre les deux tables


SELECT SUM(Montant_PU * Montant_Valeur)
FROM Historique_Valeur INNER JOIN Historique_PU ON
Date_Valeur >= Date_Debut AND
Date_valeur <= IFNULL(Date_Fin,'9999-01-01')

Ne sachant pas comment sont organisées tes tables, j'ai supposé que dans la table Historique_PU, si la date de fin n'est pas encore connue, elle est mise à NULL, d'où l'utilisation de IFNULL().


RE: [SQL] Problème de consolidation - Myrina - 01-07-2013

Faut vraiment que j'arrête de vouloir me faire des noeuds au cerveau, car quand je vois ton code SQL, j'ai presque honte de sa simplicité...
Quoique je ne pensais pas du tout à la fonction IFNULL().

Me reste juste à voir si je peux faire un trigger pour fixer Date_Fin à Date_Debut-1 de la nouvelle occurrence dans Historique_PU pour l'occurrence ou Date_Fin est à NULL.