recherche avant dernière date

Le
Talliac
je dispose d'une table dans laquelle sont stockés les cours des actions du
cac 40 sur plusieurs mois.
Cette table est enrichie tous les jours des cours du jour.
Je voudrai à l'issue de l'insertion quotidienne des cours du jour calculer
les variations en pourcentage des cours entre derniere et avant derniere date.
Pour obtenir le dernier je sais faire avec Max, mais pour l'avant dernier je
ne vois pas.
Pouvez m'aider ?
merci
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Michel_D
Le #6375571
Bonjour,

Voici ce que je te propose en 2 requêtes (il faut un champ date) :

Une 1ère requête qui calcule la variation nommée ReqCalcule :
SELECT T1.LibAction, T1.ChampDate,
(((T1.ValeurAction-T2.ValeurAction)/T2.ValeurAction)*100) AS Variation
FROM TaTable AS T1
INNER JOIN aaTable AS T2
ON (DateAdd("d",-1,T1.ChampDate)=T2.ChampDate)
AND (T1.LibAction=T2.LibAction);

Et la requête finale qui ne garde que la dernière variation des Actions :
SELECT T1.LibAction, T1.ChampDate, T1.Variation
FROM ReqCalcule AS T1
RIGHT JOIN [SELECT T.LibAction, Max(T.ChampDate) AS ChampDate
FROM TaTable AS T GROUP BY T.LibAction]. AS T2
ON (T1.LibAction=T2.LibAction) And (T1.ChampDate=T2.ChampDate);

PS: Il faut bien entendu adapter les libellés des champs.


"Talliac"
je dispose d'une table dans laquelle sont stockés les cours des actions du
cac 40 sur plusieurs mois.
Cette table est enrichie tous les jours des cours du jour.
Je voudrai à l'issue de l'insertion quotidienne des cours du jour calculer
les variations en pourcentage des cours entre derniere et avant derniere date.
Pour obtenir le dernier je sais faire avec Max, mais pour l'avant dernier je
ne vois pas.
Pouvez m'aider ?
merci


Thierry (ze Titi)
Le #6375561
Bonjour Michel !

Je vais me permettre d'émettre un doute sur la première requête. En effet, tu admets que l'avant-dernière date est celle de la veille du jour de la ligne en cours. Que se passe t'il si cette date ne comporte aucune valeur ? Ne serait-il pas plus judicieux de passer par une sous-requête pour récupérer l'avant-dernière date ?
Du style:

SELECT T1.LibAction, T1.ChampDate,(((T1.ValeurAction-T2.ValeurAction)/T2.ValeurAction)*100) AS Variation
FROM TaTable AS T1, TaTable AS T2
WHERE T2.champDate=DMax("champDate","TaTable","champDate<#" & Format([champDate],"mm/dd/yyyy") & "#") AND (T1.LibAction=T2.LibAction);

Mais peut-être n'ai pas bien compris ta requête...

Voici ce que je te propose en 2 requêtes (il faut un champ date) :

Une 1ère requête qui calcule la variation nommée ReqCalcule :
SELECT T1.LibAction, T1.ChampDate,
(((T1.ValeurAction-T2.ValeurAction)/T2.ValeurAction)*100) AS Variation
FROM TaTable AS T1
INNER JOIN aaTable AS T2
ON (DateAdd("d",-1,T1.ChampDate)=T2.ChampDate)
AND (T1.LibAction=T2.LibAction);

Et la requête finale qui ne garde que la dernière variation des Actions :
SELECT T1.LibAction, T1.ChampDate, T1.Variation
FROM ReqCalcule AS T1
RIGHT JOIN [SELECT T.LibAction, Max(T.ChampDate) AS ChampDate
FROM TaTable AS T GROUP BY T.LibAction]. AS T2
ON (T1.LibAction=T2.LibAction) And (T1.ChampDate=T2.ChampDate);

PS: Il faut bien entendu adapter les libellés des champs.


"Talliac" news:
je dispose d'une table dans laquelle sont stockés les cours des actions du
cac 40 sur plusieurs mois.
Cette table est enrichie tous les jours des cours du jour.
Je voudrai à l'issue de l'insertion quotidienne des cours du jour calculer
les variations en pourcentage des cours entre derniere et avant derniere
date. Pour obtenir le dernier je sais faire avec Max, mais pour l'avant
dernier je ne vois pas.
Pouvez m'aider ?
merci



--
Cordialement,
Thierry

Tout pour réussir avec Access :
http://www.mpfa.info


Michel_D
Le #6375451
Bonjour Thierry,

D'aprés l'énoncé de la demande il était précisé je cite :
"Cette table est enrichie tous les jours des cours du jour"

Donc à priori ta judicieuse remarque ne pourrait pas se produire, ou
alors dans ce cas c'est moi qui est pas tout compris.


"Thierry (ze Titi)"
Bonjour Michel !

Je vais me permettre d'émettre un doute sur la première requête. En effet, tu admets que l'avant-dernière date est celle de la
veille du jour de la ligne en cours. Que se passe t'il si cette date ne comporte aucune valeur ? Ne serait-il pas plus judicieux de

passer par une sous-requête pour récupérer l'avant-dernière date ?
Du style:

SELECT T1.LibAction, T1.ChampDate,(((T1.ValeurAction-T2.ValeurAction)/T2.ValeurAction)*100) AS Variation
FROM TaTable AS T1, TaTable AS T2
WHERE T2.champDate=DMax("champDate","TaTable","champDate<#" & Format([champDate],"mm/dd/yyyy") & "#") AND
(T1.LibAction=T2.LibAction);


Mais peut-être n'ai pas bien compris ta requête...

Voici ce que je te propose en 2 requêtes (il faut un champ date) :

Une 1ère requête qui calcule la variation nommée ReqCalcule :
SELECT T1.LibAction, T1.ChampDate,
(((T1.ValeurAction-T2.ValeurAction)/T2.ValeurAction)*100) AS Variation
FROM TaTable AS T1
INNER JOIN aaTable AS T2
ON (DateAdd("d",-1,T1.ChampDate)=T2.ChampDate)
AND (T1.LibAction=T2.LibAction);

Et la requête finale qui ne garde que la dernière variation des Actions :
SELECT T1.LibAction, T1.ChampDate, T1.Variation
FROM ReqCalcule AS T1
RIGHT JOIN [SELECT T.LibAction, Max(T.ChampDate) AS ChampDate
FROM TaTable AS T GROUP BY T.LibAction]. AS T2
ON (T1.LibAction=T2.LibAction) And (T1.ChampDate=T2.ChampDate);

PS: Il faut bien entendu adapter les libellés des champs.


"Talliac" news:
je dispose d'une table dans laquelle sont stockés les cours des actions du
cac 40 sur plusieurs mois.
Cette table est enrichie tous les jours des cours du jour.
Je voudrai à l'issue de l'insertion quotidienne des cours du jour calculer
les variations en pourcentage des cours entre derniere et avant derniere
date. Pour obtenir le dernier je sais faire avec Max, mais pour l'avant
dernier je ne vois pas.
Pouvez m'aider ?
merci



--
Cordialement,
Thierry

Tout pour réussir avec Access :
http://www.mpfa.info






Thierry (ze Titi)
Le #6375441
D'aprés l'énoncé de la demande il était précisé je cite :
"Cette table est enrichie tous les jours des cours du jour"

Donc à priori ta judicieuse remarque ne pourrait pas se produire, ou
alors dans ce cas c'est moi qui est pas tout compris.
C'est toi qui a raison... Ca n'est pourtant pas la première fois que je

me dis qu'il faut que j'arrête de lire les posts en diagonale...
Ceci dit, dans ce genre de cas, il vaut mieux prévenir que guérir. En
cas de fermeture de la bourse pendant une journée... lol

--
Cordialement,
Thierry

Tout pour réussir avec Access :
http://www.mpfa.info

Michel_D
Le #6375431
"Thierry (ze Titi)"
D'aprés l'énoncé de la demande il était précisé je cite :
"Cette table est enrichie tous les jours des cours du jour"

Donc à priori ta judicieuse remarque ne pourrait pas se produire, ou
alors dans ce cas c'est moi qui est pas tout compris.
C'est toi qui a raison... Ca n'est pourtant pas la première fois que je

me dis qu'il faut que j'arrête de lire les posts en diagonale...
Ceci dit, dans ce genre de cas, il vaut mieux prévenir que guérir. En
cas de fermeture de la bourse pendant une journée... lol



Tu as au contraire tout à fait raison car il est fort probable que la
bourse ne fonctionne pas le dimanche, mais c'est au posteur de
fournir le plus de précision possible.


Michel_D
Le #6375061
je dispose d'une table dans laquelle sont stockés les cours des actions du
cac 40 sur plusieurs mois.
Cette table est enrichie tous les jours des cours du jour.
Je voudrai à l'issue de l'insertion quotidienne des cours du jour calculer
les variations en pourcentage des cours entre derniere et avant derniere date.
Pour obtenir le dernier je sais faire avec Max, mais pour l'avant dernier je
ne vois pas.
Pouvez m'aider ?
merci


Bon allez, suite à la remarque de Thierry, toujours en 2 requêtes :

La 1ère requête qui fournit l'avant dernière date nommé ReqDatePrec :
SELECT T1.LibAction, Max(T2.ChampDate) AS ChampDate
FROM TaTable AS T1 INNER JOIN TaTable AS T2
ON (T1.LibAction=T2.LibAction) AND (T1.ChampDate>T2.ChampDate)
GROUP BY T1.LibAction;

Et la requête finale qui fournit la dernière variation des Actions :
SELECT T1.LibAction, T1.ChampDate,
((T1.ValeurAction-T2.ValeurAction)/T2.ValeurAction) AS Variation
FROM TaTable AS T1 RIGHT JOIN (ReqDatePrec AS T LEFT JOIN TaTable AS T2
ON (T.LibAction=T2.LibAction) And (T.ChampDate=T2.ChampDate))
ON (T1.LibAction=T.LibAction) And (T1.ChampDate>T.ChampDate);

PS1: Il faut bien entendu adapter les libellés des champs.

Publicité
Poster une réponse
Anonyme