Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

recherche avant dernière date

6 réponses
Avatar
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

6 réponses

Avatar
Michel_D
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" a écrit dans le message de 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


Avatar
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" a écrit dans le message de
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


Avatar
Michel_D
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)" a écrit dans le message de news:
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" a écrit dans le message de
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






Avatar
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

--
Cordialement,
Thierry

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

Avatar
Michel_D
"Thierry (ze Titi)" a écrit dans le message de news:
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.


Avatar
Michel_D
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.