OVH Cloud OVH Cloud

calculer une diférence

7 réponses
Avatar
SODB
Bonjour,
Etant débutant en access je souhaite trouver une solution pour le problème
suivant. Soit un table contenant 3 champs. 1 champ "numérodesérie" 1champ
"Kilométrage" et un champ "date".
L'utilisation est la suivante : chaque fois qu'un véhicule passe au garage
on note dans la table le numéro de série, le kilométrage et la date.
J'aimerais avoir une requete qui me donne pour chaque numéro de série la
différence en kilomètres entre chaque passage au garage. Simple, non ? Moi
je ne trouve pas comment soustraire deux valeurs de deux enregistrements qui
se suivent.....
Merci pour la solution
Serge

7 réponses

Avatar
Anor
Bonjour,

les deux enregistrements ne se suivent pas forcément.

la différence cherchée est égale :

au kilométrage actuel
moins
le kilométrage maxi trouvé dans la table
pour lequel
le numéro de série de la table
est égal
au numéro de série actuel
et
la date de visite trouvée dans la table
est strictement inférieure
à la date actuelle.

la fonction à utiliser est donc DMax("kilométrage","latable",critères)

critères pas évident à écrire à la volée car double critère et format numéro de série inconnu
(texte ou numérique)

--
à+
Arnaud
--------------------------------------------------
*Avant toute chose* : http://users.skynet.be/mpfa/
Access Memorandum - http://memoaccess.free.fr
/Réponses souhaitées sur ce forum, merci/
--------------------------------------------------

SODB :
| Bonjour,
| Etant débutant en access je souhaite trouver une solution pour le
| problème suivant. Soit un table contenant 3 champs. 1 champ
| "numérodesérie" 1champ "Kilométrage" et un champ "date".
| L'utilisation est la suivante : chaque fois qu'un véhicule passe au
| garage on note dans la table le numéro de série, le kilométrage et la
| date. J'aimerais avoir une requete qui me donne pour chaque numéro de
| série la différence en kilomètres entre chaque passage au garage.
| Simple, non ? Moi je ne trouve pas comment soustraire deux valeurs de
| deux enregistrements qui se suivent.....
| Merci pour la solution
| Serge
Avatar
Pierre CFI
bonjour
des qu'on parle km du compteur des voitures, anor se pointe, c'est le
spécialiste du rajeunissement des compteurs

--
Pierre CFI
Microsoft MVP Access

Pour mieux utiliser microsoft.public.fr.access...
http://users.skynet.be/mpfa/charte.htm

"Anor" <http://memoaccess.free.fr/anor/email.htm> a écrit dans le message de
news:
Bonjour,

les deux enregistrements ne se suivent pas forcément.

la différence cherchée est égale :

au kilométrage actuel
moins
le kilométrage maxi trouvé dans la table
pour lequel
le numéro de série de la table
est égal
au numéro de série actuel
et
la date de visite trouvée dans la table
est strictement inférieure
à la date actuelle.

la fonction à utiliser est donc DMax("kilométrage","latable",critères)

critères pas évident à écrire à la volée car double critère et format
numéro de série inconnu

(texte ou numérique)

--
à+
Arnaud
--------------------------------------------------
*Avant toute chose* : http://users.skynet.be/mpfa/
Access Memorandum - http://memoaccess.free.fr
/Réponses souhaitées sur ce forum, merci/
--------------------------------------------------

SODB :
| Bonjour,
| Etant débutant en access je souhaite trouver une solution pour le
| problème suivant. Soit un table contenant 3 champs. 1 champ
| "numérodesérie" 1champ "Kilométrage" et un champ "date".
| L'utilisation est la suivante : chaque fois qu'un véhicule passe au
| garage on note dans la table le numéro de série, le kilométrage et la
| date. J'aimerais avoir une requete qui me donne pour chaque numéro de
| série la différence en kilomètres entre chaque passage au garage.
| Simple, non ? Moi je ne trouve pas comment soustraire deux valeurs de
| deux enregistrements qui se suivent.....
| Merci pour la solution
| Serge




Avatar
Maxence HUBICHE
Bonsoir,

tu dois faire une requête correllée.
J'en ai souvent parlé sur developpez.com

C'est une requête qui, pour s'exécuter a besoin d'une autre requête qui
elle-même a besoin de la première.
Pour les exécuter, tu auras besoin de passer par des alias de table.

Essaie ceci, dans le cas où ta table est la suivante :
CREATE TABLE LaTable (LaDate Date, LeNum Int, LeKM Long)

SELECT LaDate, LeNum, LeKM, LeKM - nz((
SELECT Max(LeKM)
FROM LaTable T2
WHERE T2.LeNum=T1.LeNum AND T2.LaDate<T1.LaDate),0) As LaDiff
FROM LaTable T1


Et dis-nous si tu es parvenu à faire ce que tu attendais :)


--
----------------------------------------------------------------------------
-
Maxence HUBICHE
Formateur et développeur indépendant
Modérateur/rédacteur sur http://www.developpez.com

"SODB" a écrit dans le message de news:
3ff2f804$0$2445$
Bonjour,
Etant débutant en access je souhaite trouver une solution pour le problème
suivant. Soit un table contenant 3 champs. 1 champ "numérodesérie" 1champ
"Kilométrage" et un champ "date".
L'utilisation est la suivante : chaque fois qu'un véhicule passe au garage
on note dans la table le numéro de série, le kilométrage et la date.
J'aimerais avoir une requete qui me donne pour chaque numéro de série la
différence en kilomètres entre chaque passage au garage. Simple, non ? Moi
je ne trouve pas comment soustraire deux valeurs de deux enregistrements
qui

se suivent.....
Merci pour la solution
Serge




Avatar
SODB
Merci beaucoup, cela fonctionne mais pas dans le bon sens. J'obtiens la
différence entre un enregistrement et le précédent. J'aimerais avoir la
différence entre un enregistrement et le suivant, et si il n'y a pas de
suivant je désire la valeur zéro.
merci encore pour l'aide future
Serge


"Maxence HUBICHE" a écrit dans le message de
news:ur$%23XG$
Bonsoir,

tu dois faire une requête correllée.
J'en ai souvent parlé sur developpez.com

C'est une requête qui, pour s'exécuter a besoin d'une autre requête qui
elle-même a besoin de la première.
Pour les exécuter, tu auras besoin de passer par des alias de table.

Essaie ceci, dans le cas où ta table est la suivante :
CREATE TABLE LaTable (LaDate Date, LeNum Int, LeKM Long)

SELECT LaDate, LeNum, LeKM, LeKM - nz((
SELECT Max(LeKM)
FROM LaTable T2
WHERE T2.LeNum=T1.LeNum AND T2.LaDate<T1.LaDate),0) As LaDiff
FROM LaTable T1


Et dis-nous si tu es parvenu à faire ce que tu attendais :)


--
--------------------------------------------------------------------------
--

-
Maxence HUBICHE
Formateur et développeur indépendant
Modérateur/rédacteur sur http://www.developpez.com

"SODB" a écrit dans le message de news:
3ff2f804$0$2445$
Bonjour,
Etant débutant en access je souhaite trouver une solution pour le
problème


suivant. Soit un table contenant 3 champs. 1 champ "numérodesérie"
1champ


"Kilométrage" et un champ "date".
L'utilisation est la suivante : chaque fois qu'un véhicule passe au
garage


on note dans la table le numéro de série, le kilométrage et la date.
J'aimerais avoir une requete qui me donne pour chaque numéro de série la
différence en kilomètres entre chaque passage au garage. Simple, non ?
Moi


je ne trouve pas comment soustraire deux valeurs de deux enregistrements
qui

se suivent.....
Merci pour la solution
Serge








Avatar
Maxence HUBICHE
Ben là, tu aurais pu faire un petit effort quand même !!!

SELECT LaDate, LeNum, LeKM, LeKM - nz((
SELECT Min(LeKM)
FROM LaTable T2
WHERE T2.LeNum=T1.LeNum AND T2.LaDate>T1.LaDate),0) As LaDiff
FROM LaTable T1

Il fallait changer le signe< en > et le max en Min.



--
----------------------------------------------------------------------------
-
Maxence HUBICHE
Formateur et développeur indépendant
Modérateur/rédacteur sur http://www.developpez.com

"SODB" a écrit dans le message de news:
3ff422a7$0$2444$
Merci beaucoup, cela fonctionne mais pas dans le bon sens. J'obtiens la
différence entre un enregistrement et le précédent. J'aimerais avoir la
différence entre un enregistrement et le suivant, et si il n'y a pas de
suivant je désire la valeur zéro.
merci encore pour l'aide future
Serge


"Maxence HUBICHE" a écrit dans le message de
news:ur$%23XG$
Bonsoir,

tu dois faire une requête correllée.
J'en ai souvent parlé sur developpez.com

C'est une requête qui, pour s'exécuter a besoin d'une autre requête qui
elle-même a besoin de la première.
Pour les exécuter, tu auras besoin de passer par des alias de table.

Essaie ceci, dans le cas où ta table est la suivante :
CREATE TABLE LaTable (LaDate Date, LeNum Int, LeKM Long)

SELECT LaDate, LeNum, LeKM, LeKM - nz((
SELECT Max(LeKM)
FROM LaTable T2
WHERE T2.LeNum=T1.LeNum AND T2.LaDate<T1.LaDate),0) As LaDiff
FROM LaTable T1


Et dis-nous si tu es parvenu à faire ce que tu attendais :)


--


--------------------------------------------------------------------------
--
-
Maxence HUBICHE
Formateur et développeur indépendant
Modérateur/rédacteur sur http://www.developpez.com

"SODB" a écrit dans le message de news:
3ff2f804$0$2445$
Bonjour,
Etant débutant en access je souhaite trouver une solution pour le
problème


suivant. Soit un table contenant 3 champs. 1 champ "numérodesérie"
1champ


"Kilométrage" et un champ "date".
L'utilisation est la suivante : chaque fois qu'un véhicule passe au
garage


on note dans la table le numéro de série, le kilométrage et la date.
J'aimerais avoir une requete qui me donne pour chaque numéro de série
la



différence en kilomètres entre chaque passage au garage. Simple, non ?
Moi


je ne trouve pas comment soustraire deux valeurs de deux
enregistrements



qui
se suivent.....
Merci pour la solution
Serge












Avatar
SODB
Merci Maxence,
C'est presque ça, seulement j'obtiens des valeurs négatives et je n'ai pas
la valeur zéro lorsqu'il n'y a plus d'enregistrement qui suit. Mais cette
fois j'ai fait un effort. Voici ce que j'ai fait et j'obtiens le résultat
escompté:

SELECT T1.LeNum, T1.LeKm, T1.LaDate, nz((SELECT Min(LeKM)
FROM LaTable T2
WHERE T2.LeNum=T1.LeNum AND T2.LaDate>T1.LaDate),leKM)-LeKM AS LaDiff
FROM LaTable AS T1;

Encore une petite question : que signifie le "nz" ?
Encore mille merci et meilleurs voeux pour 2004.
Serge

"Maxence HUBICHE" a écrit dans le message de
news:
Ben là, tu aurais pu faire un petit effort quand même !!!

SELECT LaDate, LeNum, LeKM, LeKM - nz((
SELECT Min(LeKM)
FROM LaTable T2
WHERE T2.LeNum=T1.LeNum AND T2.LaDate>T1.LaDate),0) As LaDiff
FROM LaTable T1

Il fallait changer le signe< en > et le max en Min.



--
--------------------------------------------------------------------------
--

-
Maxence HUBICHE
Formateur et développeur indépendant
Modérateur/rédacteur sur http://www.developpez.com

"SODB" a écrit dans le message de news:
3ff422a7$0$2444$
Merci beaucoup, cela fonctionne mais pas dans le bon sens. J'obtiens la
différence entre un enregistrement et le précédent. J'aimerais avoir la
différence entre un enregistrement et le suivant, et si il n'y a pas de
suivant je désire la valeur zéro.
merci encore pour l'aide future
Serge


"Maxence HUBICHE" a écrit dans le message de
news:ur$%23XG$
Bonsoir,

tu dois faire une requête correllée.
J'en ai souvent parlé sur developpez.com

C'est une requête qui, pour s'exécuter a besoin d'une autre requête
qui



elle-même a besoin de la première.
Pour les exécuter, tu auras besoin de passer par des alias de table.

Essaie ceci, dans le cas où ta table est la suivante :
CREATE TABLE LaTable (LaDate Date, LeNum Int, LeKM Long)

SELECT LaDate, LeNum, LeKM, LeKM - nz((
SELECT Max(LeKM)
FROM LaTable T2
WHERE T2.LeNum=T1.LeNum AND T2.LaDate<T1.LaDate),0) As LaDiff
FROM LaTable T1


Et dis-nous si tu es parvenu à faire ce que tu attendais :)


--




--------------------------------------------------------------------------
--
-
Maxence HUBICHE
Formateur et développeur indépendant
Modérateur/rédacteur sur http://www.developpez.com

"SODB" a écrit dans le message de news:
3ff2f804$0$2445$
Bonjour,
Etant débutant en access je souhaite trouver une solution pour le
problème


suivant. Soit un table contenant 3 champs. 1 champ "numérodesérie"
1champ


"Kilométrage" et un champ "date".
L'utilisation est la suivante : chaque fois qu'un véhicule passe au
garage


on note dans la table le numéro de série, le kilométrage et la date.
J'aimerais avoir une requete qui me donne pour chaque numéro de
série




la
différence en kilomètres entre chaque passage au garage. Simple, non
?




Moi
je ne trouve pas comment soustraire deux valeurs de deux
enregistrements



qui
se suivent.....
Merci pour la solution
Serge
















Avatar
Maxence HUBICHE
NZ est une fonction intégrée d'Access.
La traduction qu'on pourrait en faire est NullversZéro.
Son but premier étant de transformer les Null en 0.
Les 2 arguments sont :
-Quelle valeur faut-il tester et, éventuellement transformer ?
-Quelle valeur faut-il mettre en remplacement du NULL.
On n'est pas obligé de remplir le second argument si la valeur voulue est 0.
Mais c'est plus propre... :)



--
----------------------------------------------------------------------------
-
Maxence HUBICHE
Formateur et développeur indépendant
Modérateur/rédacteur sur http://www.developpez.com

"SODB" a écrit dans le message de news:
3ff4226e$0$28993$
Merci Maxence,
C'est presque ça, seulement j'obtiens des valeurs négatives et je n'ai pas
la valeur zéro lorsqu'il n'y a plus d'enregistrement qui suit. Mais cette
fois j'ai fait un effort. Voici ce que j'ai fait et j'obtiens le résultat
escompté:

SELECT T1.LeNum, T1.LeKm, T1.LaDate, nz((SELECT Min(LeKM)
FROM LaTable T2
WHERE T2.LeNum=T1.LeNum AND T2.LaDate>T1.LaDate),leKM)-LeKM AS LaDiff
FROM LaTable AS T1;

Encore une petite question : que signifie le "nz" ?
Encore mille merci et meilleurs voeux pour 2004.
Serge

"Maxence HUBICHE" a écrit dans le message de
news:
Ben là, tu aurais pu faire un petit effort quand même !!!

SELECT LaDate, LeNum, LeKM, LeKM - nz((
SELECT Min(LeKM)
FROM LaTable T2
WHERE T2.LeNum=T1.LeNum AND T2.LaDate>T1.LaDate),0) As LaDiff
FROM LaTable T1

Il fallait changer le signe< en > et le max en Min.



--


--------------------------------------------------------------------------
--
-
Maxence HUBICHE
Formateur et développeur indépendant
Modérateur/rédacteur sur http://www.developpez.com

"SODB" a écrit dans le message de news:
3ff422a7$0$2444$
Merci beaucoup, cela fonctionne mais pas dans le bon sens. J'obtiens
la



différence entre un enregistrement et le précédent. J'aimerais avoir
la



différence entre un enregistrement et le suivant, et si il n'y a pas
de



suivant je désire la valeur zéro.
merci encore pour l'aide future
Serge


"Maxence HUBICHE" a écrit dans le message de
news:ur$%23XG$
Bonsoir,

tu dois faire une requête correllée.
J'en ai souvent parlé sur developpez.com

C'est une requête qui, pour s'exécuter a besoin d'une autre requête
qui



elle-même a besoin de la première.
Pour les exécuter, tu auras besoin de passer par des alias de table.

Essaie ceci, dans le cas où ta table est la suivante :
CREATE TABLE LaTable (LaDate Date, LeNum Int, LeKM Long)

SELECT LaDate, LeNum, LeKM, LeKM - nz((
SELECT Max(LeKM)
FROM LaTable T2
WHERE T2.LeNum=T1.LeNum AND T2.LaDate<T1.LaDate),0) As LaDiff
FROM LaTable T1


Et dis-nous si tu es parvenu à faire ce que tu attendais :)


--






--------------------------------------------------------------------------
--
-
Maxence HUBICHE
Formateur et développeur indépendant
Modérateur/rédacteur sur http://www.developpez.com

"SODB" a écrit dans le message de news:
3ff2f804$0$2445$
Bonjour,
Etant débutant en access je souhaite trouver une solution pour le
problème


suivant. Soit un table contenant 3 champs. 1 champ "numérodesérie"
1champ


"Kilométrage" et un champ "date".
L'utilisation est la suivante : chaque fois qu'un véhicule passe
au





garage
on note dans la table le numéro de série, le kilométrage et la
date.





J'aimerais avoir une requete qui me donne pour chaque numéro de
série




la
différence en kilomètres entre chaque passage au garage. Simple,
non





?
Moi
je ne trouve pas comment soustraire deux valeurs de deux
enregistrements



qui
se suivent.....
Merci pour la solution
Serge