GNT sans publicité, site mobile, fonctionnalitées exclusives...

Nombre de part cumulé

Le
SystemC
Bonjour à tous,

Je dois calculer un nombre de part cumulé.

Voici un exemple de table :

date_price price DIVIDEND
21-Dec-90 10.00 0.000000
31-Dec-90 10.00 0.031750
31-Jan-91 10.00 0.088755

Et voici ce que j'aimerais obtenir

date_price price DIVIDEND NB_PART
21-Dec-90 10.00 0.000000 1
31-Dec-90 10.00 0.031750 1.00317500
31-Jan-91 10.00 0.088755 1.01207868

Pour calculer le nombre de part, je dois faire appel au champ calculé
précédent. Par exemple pour calculé le nombre de part cumulé en date du
31-Jan-91 je dois suivre la formule suivante :

1.00317500+((0.088755*1.00317500)/10)

Je ne sais pas comment aller chercher le nombre de part cumulé précédent.

Merci pour votre aide
Lire les 7 réponses

Questions / Réponses high-tech
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Eric
Le #5947151
Bonsoir,

En supposant que tu n'as pas de doublons sur la date. Crées une requête
sur cette table et tries sur la date en ordre croissant.
Crées ensuite une 2e requête sur cette requête en ajoutant un compteur
défini comme suit:
Cpt: nz(CpteDom("date_price";"SystemC";"[Date_price]<" &
Format([date_price];"#jj/mm/aaaa#"));0)+1
plus tous les autres champs (SystemC est le nom de la 1ere requête)

Soit rsq1 cette requête.

Dans un module global,tu copies la fonction suivante:
Function NbPart(Compteur As Long) As Double
If Compteur = 1 Then
NbPart = 1
Else
NbPart = NbPart(Compteur - 1) + _
NbPart(Compteur - 1) * _
DLookup("dividend/price", "rsq1", "cpt=" & Compteur)
End If
End Function

Tu crées une 3ème requête sur la précédente (rsq1). Tu mets tous les
champs et ajoutes le champ calculé suivant :
Nb_Part: nbpart([cpt])

Cette requête devrait t'afficher les résultats escomptés



Bonjour à tous,

Je dois calculer un nombre de part cumulé.

Voici un exemple de table :

date_price price DIVIDEND
21-Dec-90 10.00 0.000000
31-Dec-90 10.00 0.031750
31-Jan-91 10.00 0.088755

Et voici ce que j'aimerais obtenir

date_price price DIVIDEND NB_PART
21-Dec-90 10.00 0.000000 1
31-Dec-90 10.00 0.031750 1.00317500
31-Jan-91 10.00 0.088755 1.01207868

Pour calculer le nombre de part, je dois faire appel au champ calculé
précédent. Par exemple pour calculé le nombre de part cumulé en date du
31-Jan-91 je dois suivre la formule suivante :

1.00317500+((0.088755*1.00317500)/10)

Je ne sais pas comment aller chercher le nombre de part cumulé précédent.

Merci pour votre aide


--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/micro...cess?hl=fr

SystemC
Le #5946911
Merci Éric pour l'aide.

Effectivement, cela donne le résultat désiré. Par contre, cette solution
n'est pas applicable puisque le temps que la requête soit complété est tout
simplement trop long.

J'ai pensé de passer la solution en une requête en ajoutant un index à la
table, mais cela n'aide pas vraiment. Je crois que c'est du au fait a
l'appel récursif de la fonction NbPart ET de la fonction DLookup.

J'ai lu que chaque fois que nous faisons appel à la fonction DLookup, cela
équivaut à faire une requête. Cela peut facilement ralentir la requête.

Il est impératif que la méthode de calcul de part cumulé soit rapide car
c'est à partir de cette données que je calculerai des rendements par la suite.

Merci encore


Bonsoir,

En supposant que tu n'as pas de doublons sur la date. Crées une requête
sur cette table et tries sur la date en ordre croissant.
Crées ensuite une 2e requête sur cette requête en ajoutant un compteur
défini comme suit:
Cpt: nz(CpteDom("date_price";"SystemC";"[Date_price]<" &
Format([date_price];"#jj/mm/aaaa#"));0)+1
plus tous les autres champs (SystemC est le nom de la 1ere requête)

Soit rsq1 cette requête.

Dans un module global,tu copies la fonction suivante:
Function NbPart(Compteur As Long) As Double
If Compteur = 1 Then
NbPart = 1
Else
NbPart = NbPart(Compteur - 1) + _
NbPart(Compteur - 1) * _
DLookup("dividend/price", "rsq1", "cpt=" & Compteur)
End If
End Function

Tu crées une 3ème requête sur la précédente (rsq1). Tu mets tous les
champs et ajoutes le champ calculé suivant :
Nb_Part: nbpart([cpt])

Cette requête devrait t'afficher les résultats escomptés



Bonjour à tous,

Je dois calculer un nombre de part cumulé.

Voici un exemple de table :

date_price price DIVIDEND
21-Dec-90 10.00 0.000000
31-Dec-90 10.00 0.031750
31-Jan-91 10.00 0.088755

Et voici ce que j'aimerais obtenir

date_price price DIVIDEND NB_PART
21-Dec-90 10.00 0.000000 1
31-Dec-90 10.00 0.031750 1.00317500
31-Jan-91 10.00 0.088755 1.01207868

Pour calculer le nombre de part, je dois faire appel au champ calculé
précédent. Par exemple pour calculé le nombre de part cumulé en date du
31-Jan-91 je dois suivre la formule suivante :

1.00317500+((0.088755*1.00317500)/10)

Je ne sais pas comment aller chercher le nombre de part cumulé précédent.

Merci pour votre aide


--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/micro...cess?hl=fr




Ilan
Le #5946821
Bonsoir, j'ai peut-être une requete pour toi

Pour être plus clair il te faut faire une jointure de ta table sur elle-même
Pour que la requete ici soit lisible
je replace (NZ(LAST(B.dividend)/10)) par B.dividend

SELECT A.date_price, A.price, A.dividend,
1+B.dividend +(A.dividend*(1+B.dividend))/10 AS NbPart
FROM Table as A
LEFT JOIN Table as B ON A.date_price>B.date_price
GROUP BY a.date_price, A.price, A.dividend;




Merci Éric pour l'aide.

Effectivement, cela donne le résultat désiré. Par contre, cette solution
n'est pas applicable puisque le temps que la requête soit complété est tout
simplement trop long.

J'ai pensé de passer la solution en une requête en ajoutant un index à la
table, mais cela n'aide pas vraiment. Je crois que c'est du au fait a
l'appel récursif de la fonction NbPart ET de la fonction DLookup.

J'ai lu que chaque fois que nous faisons appel à la fonction DLookup, cela
équivaut à faire une requête. Cela peut facilement ralentir la requête.

Il est impératif que la méthode de calcul de part cumulé soit rapide car
c'est à partir de cette données que je calculerai des rendements par la suite.

Merci encore


Bonsoir,

En supposant que tu n'as pas de doublons sur la date. Crées une requête
sur cette table et tries sur la date en ordre croissant.
Crées ensuite une 2e requête sur cette requête en ajoutant un compteur
défini comme suit:
Cpt: nz(CpteDom("date_price";"SystemC";"[Date_price]<" &
Format([date_price];"#jj/mm/aaaa#"));0)+1
plus tous les autres champs (SystemC est le nom de la 1ere requête)

Soit rsq1 cette requête.

Dans un module global,tu copies la fonction suivante:
Function NbPart(Compteur As Long) As Double
If Compteur = 1 Then
NbPart = 1
Else
NbPart = NbPart(Compteur - 1) + _
NbPart(Compteur - 1) * _
DLookup("dividend/price", "rsq1", "cpt=" & Compteur)
End If
End Function

Tu crées une 3ème requête sur la précédente (rsq1). Tu mets tous les
champs et ajoutes le champ calculé suivant :
Nb_Part: nbpart([cpt])

Cette requête devrait t'afficher les résultats escomptés



Bonjour à tous,

Je dois calculer un nombre de part cumulé.

Voici un exemple de table :

date_price price DIVIDEND
21-Dec-90 10.00 0.000000
31-Dec-90 10.00 0.031750
31-Jan-91 10.00 0.088755

Et voici ce que j'aimerais obtenir

date_price price DIVIDEND NB_PART
21-Dec-90 10.00 0.000000 1
31-Dec-90 10.00 0.031750 1.00317500
31-Jan-91 10.00 0.088755 1.01207868

Pour calculer le nombre de part, je dois faire appel au champ calculé
précédent. Par exemple pour calculé le nombre de part cumulé en date du
31-Jan-91 je dois suivre la formule suivante :

1.00317500+((0.088755*1.00317500)/10)

Je ne sais pas comment aller chercher le nombre de part cumulé précédent.

Merci pour votre aide


--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/micro...cess?hl=fr






Ilan
Le #5946791
Ou cette requete peut-être :
SELECT A.date_price, A.price,
A.dividend,LAST((1+nz(B.dividend)/10)*(1+(a.dividend)/10)) as nbpart FROM
Table4 as A LEFT JOIN Table4 as B ON A.date_price>b.date_price GROUP BY
A.date_price, a.price, A.dividend

Il faudrait que tu donnes d'autres valeur pour vérifier.


Bonsoir, j'ai peut-être une requete pour toi

Pour être plus clair il te faut faire une jointure de ta table sur elle-même
Pour que la requete ici soit lisible
je replace (NZ(LAST(B.dividend)/10)) par B.dividend

SELECT A.date_price, A.price, A.dividend,
1+B.dividend +(A.dividend*(1+B.dividend))/10 AS NbPart
FROM Table as A
LEFT JOIN Table as B ON A.date_price>B.date_price
GROUP BY a.date_price, A.price, A.dividend;




Merci Éric pour l'aide.

Effectivement, cela donne le résultat désiré. Par contre, cette solution
n'est pas applicable puisque le temps que la requête soit complété est tout
simplement trop long.

J'ai pensé de passer la solution en une requête en ajoutant un index à la
table, mais cela n'aide pas vraiment. Je crois que c'est du au fait a
l'appel récursif de la fonction NbPart ET de la fonction DLookup.

J'ai lu que chaque fois que nous faisons appel à la fonction DLookup, cela
équivaut à faire une requête. Cela peut facilement ralentir la requête.

Il est impératif que la méthode de calcul de part cumulé soit rapide car
c'est à partir de cette données que je calculerai des rendements par la suite.

Merci encore


Bonsoir,

En supposant que tu n'as pas de doublons sur la date. Crées une requête
sur cette table et tries sur la date en ordre croissant.
Crées ensuite une 2e requête sur cette requête en ajoutant un compteur
défini comme suit:
Cpt: nz(CpteDom("date_price";"SystemC";"[Date_price]<" &
Format([date_price];"#jj/mm/aaaa#"));0)+1
plus tous les autres champs (SystemC est le nom de la 1ere requête)

Soit rsq1 cette requête.

Dans un module global,tu copies la fonction suivante:
Function NbPart(Compteur As Long) As Double
If Compteur = 1 Then
NbPart = 1
Else
NbPart = NbPart(Compteur - 1) + _
NbPart(Compteur - 1) * _
DLookup("dividend/price", "rsq1", "cpt=" & Compteur)
End If
End Function

Tu crées une 3ème requête sur la précédente (rsq1). Tu mets tous les
champs et ajoutes le champ calculé suivant :
Nb_Part: nbpart([cpt])

Cette requête devrait t'afficher les résultats escomptés



Bonjour à tous,

Je dois calculer un nombre de part cumulé.

Voici un exemple de table :

date_price price DIVIDEND
21-Dec-90 10.00 0.000000
31-Dec-90 10.00 0.031750
31-Jan-91 10.00 0.088755

Et voici ce que j'aimerais obtenir

date_price price DIVIDEND NB_PART
21-Dec-90 10.00 0.000000 1
31-Dec-90 10.00 0.031750 1.00317500
31-Jan-91 10.00 0.088755 1.01207868

Pour calculer le nombre de part, je dois faire appel au champ calculé
précédent. Par exemple pour calculé le nombre de part cumulé en date du
31-Jan-91 je dois suivre la formule suivante :

1.00317500+((0.088755*1.00317500)/10)

Je ne sais pas comment aller chercher le nombre de part cumulé précédent.

Merci pour votre aide


--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/micro...cess?hl=fr








SystemC
Le #5946771
Bonjour Ilan

Merci pour la piste,

Je fait des test de mon coté, mais disons que je suis encore débutant
concernant l'édition de requête par l'éditeur SQL et non par le mode création.

Cela ne donne pas le résultat voulu malheureusement et ce pour deux raison.
Premièrement, il y a le fait que le prix peut différer de 10 et deuxièmement,
je crois que le nombre de part cumulé se cumule seulement avec 2
enregistrement. Voici le résultat voulu avec un plus grand historique.

DATE_PRICE PRICE DIVIDEND NB_PART
31-Dec-90 10.00 0.031750 1.00317500
31-Jan-91 10.00 0.088755 1.01207868
28-Feb-91 10.00 0.075881 1.01975841
28-Mar-91 10.00 0.071326 1.02703193
30-Apr-91 10.00 0.085756 1.03583937
31-May-91 10.00 0.075292 1.04363843
28-Jun-91 10.00 0.062671 1.05017896
31-Jul-91 10.00 0.072981 1.05784331
30-Aug-91 10.00 0.065050 1.06472456
30-Sep-91 10.00 0.067074 1.07186613
31-Oct-91 10.00 0.066203 1.07896223
29-Nov-91 10.00 0.060595 1.08550015
31-Dec-91 10.00 0.063479 1.09239078
31-Jan-92 10.00 0.059005 1.09883643
28-Feb-92 10.00 0.051000 1.10444054
31-Mar-92 10.00 0.056125 1.11063917
30-Apr-92 10.00 0.052401 1.11645904
29-May-92 10.00 0.057717 1.12290292



Ou cette requete peut-être :
SELECT A.date_price, A.price,
A.dividend,LAST((1+nz(B.dividend)/10)*(1+(a.dividend)/10)) as nbpart FROM
Table4 as A LEFT JOIN Table4 as B ON A.date_price>b.date_price GROUP BY
A.date_price, a.price, A.dividend

Il faudrait que tu donnes d'autres valeur pour vérifier.


Bonsoir, j'ai peut-être une requete pour toi

Pour être plus clair il te faut faire une jointure de ta table sur elle-même
Pour que la requete ici soit lisible
je replace (NZ(LAST(B.dividend)/10)) par B.dividend

SELECT A.date_price, A.price, A.dividend,
1+B.dividend +(A.dividend*(1+B.dividend))/10 AS NbPart
FROM Table as A
LEFT JOIN Table as B ON A.date_price>B.date_price
GROUP BY a.date_price, A.price, A.dividend;




Merci Éric pour l'aide.

Effectivement, cela donne le résultat désiré. Par contre, cette solution
n'est pas applicable puisque le temps que la requête soit complété est tout
simplement trop long.

J'ai pensé de passer la solution en une requête en ajoutant un index à la
table, mais cela n'aide pas vraiment. Je crois que c'est du au fait a
l'appel récursif de la fonction NbPart ET de la fonction DLookup.

J'ai lu que chaque fois que nous faisons appel à la fonction DLookup, cela
équivaut à faire une requête. Cela peut facilement ralentir la requête.

Il est impératif que la méthode de calcul de part cumulé soit rapide car
c'est à partir de cette données que je calculerai des rendements par la suite.

Merci encore


Bonsoir,

En supposant que tu n'as pas de doublons sur la date. Crées une requête
sur cette table et tries sur la date en ordre croissant.
Crées ensuite une 2e requête sur cette requête en ajoutant un compteur
défini comme suit:
Cpt: nz(CpteDom("date_price";"SystemC";"[Date_price]<" &
Format([date_price];"#jj/mm/aaaa#"));0)+1
plus tous les autres champs (SystemC est le nom de la 1ere requête)

Soit rsq1 cette requête.

Dans un module global,tu copies la fonction suivante:
Function NbPart(Compteur As Long) As Double
If Compteur = 1 Then
NbPart = 1
Else
NbPart = NbPart(Compteur - 1) + _
NbPart(Compteur - 1) * _
DLookup("dividend/price", "rsq1", "cpt=" & Compteur)
End If
End Function

Tu crées une 3ème requête sur la précédente (rsq1). Tu mets tous les
champs et ajoutes le champ calculé suivant :
Nb_Part: nbpart([cpt])

Cette requête devrait t'afficher les résultats escomptés



Bonjour à tous,

Je dois calculer un nombre de part cumulé.

Voici un exemple de table :

date_price price DIVIDEND
21-Dec-90 10.00 0.000000
31-Dec-90 10.00 0.031750
31-Jan-91 10.00 0.088755

Et voici ce que j'aimerais obtenir

date_price price DIVIDEND NB_PART
21-Dec-90 10.00 0.000000 1
31-Dec-90 10.00 0.031750 1.00317500
31-Jan-91 10.00 0.088755 1.01207868

Pour calculer le nombre de part, je dois faire appel au champ calculé
précédent. Par exemple pour calculé le nombre de part cumulé en date du
31-Jan-91 je dois suivre la formule suivante :

1.00317500+((0.088755*1.00317500)/10)

Je ne sais pas comment aller chercher le nombre de part cumulé précédent.

Merci pour votre aide


--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/micro...cess?hl=fr










Publicité
Suivre les réponses
Poster une réponse
Anonyme