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

Problème de conception table et requête

3 réponses
Avatar
Access13090
Bonsoir à tou(te)s,

Je rencontre a priori un problème pour concevoir une table et une
requête calculée.

La table en question doit permettre, pour chacun de nos véhicules, de
relever le kilométrage, la quantité de carburant (plein dans une
station) en fonction de la date.
J'ai pensé créer ma table de la façon suivante :
table RELEVÉ(N°chrono, N°véhicule, date, relevé km, quantité carburant)

Concernant la requête, je souhaite pouvoir calculer le nombre de
kilomètres parcourus, entre l'avant-dernière et la dernière date de
relevé, ainsi que la quantité de carburant. Par la suite connaitre
aussi mois par mois le kilométrage parcouru ainsi que la quantité
totale de carburant.

Mais là, je suis totalement perdu. Je ne sais pas comment monter cette
requête.

Quelqu'un pourrait-il me guider ou me conseiller?
Merci d'avance

3 réponses

Avatar
Michel_D
Bonjour,

Bonsoir à tou(te)s,

Je rencontre a priori un problème pour concevoir une table et une
requête calculée.

La table en question doit permettre, pour chacun de nos véhicules, de
relever le kilométrage, la quantité de carburant (plein dans une
station) en fonction de la date.
J'ai pensé créer ma table de la façon suivante :
table RELEVÉ(N°chrono, N°véhicule, date, relevé km, quantité carburant)

Concernant la requête, je souhaite pouvoir calculer le nombre de
kilomètres parcourus, entre l'avant-dernière et la dernière date de
relevé, ainsi que la quantité de carburant. Par la suite connaitre aussi
mois par mois le kilométrage parcouru ainsi que la quantité totale de
carburant.

Mais là, je suis totalement perdu. Je ne sais pas comment monter cette
requête.

Quelqu'un pourrait-il me guider ou me conseiller?



Voici ce que je te propose en plusieurs requêtes (à adapter) :

La 1ère requête intermédiaire nommée "aaarConso0" :

SELECT T1.IDvehicule, T1.DatePlein AS DatePlein,
Min(DateDiff("d",T1.DatePlein,T2.DatePlein)) AS DiffDate
FROM TaTable AS T1 INNER JOIN TaTable AS T2
ON (T1.IDvehicule=T2.IDvehicule) AND (T1.DatePlein<T2.DatePlein)
GROUP BY T1.IDvehicule, T1.DatePlein
ORDER BY T1.IDvehicule, T1.DatePlein DESC;

La 2ème requête intermédiaire nommée "aaarConso1" :

SELECT T1.IDvehicule, T1.DatePlein,
DateAdd("d",T1.DiffDate,T1.DatePlein) AS derDatePlein
FROM aaarConso0 AS T1
WHERE T1.DatePlein
In (SELECT Max(DatePlein) FROM aaarConso0 GROUP BY IDvehicule)
ORDER BY T1.IDvehicule;

La 3ème requête qui donne le résultat pour la 1ère demande :

SELECT T2.IDvehicule, T2.DatePlein, T2.derDatePlein,
(T3.Compteur-T1.Compteur) AS distance, T1.Quantite AS conso
FROM TaTable AS T1 RIGHT JOIN (aaarConso1 AS T2 LEFT JOIN TaTable AS T3
ON (T2.derDatePlein=T3.DatePlein) AND (T2.IDvehicule=T3.IDvehicule))
ON (T1.DatePlein=T2.DatePlein) AND (T1.IDvehicule=T2.IDvehicule);

La 4ème requête intermédiaire nommée "aaarConso4" :

SELECT T1.IDvehicule, Min(T1.DatePlein) AS DatePlein1,
Max(T1.DatePlein) AS DatePlein2, Sum(T1.Quantite) AS ConsoMois
FROM TaTable AS T1
GROUP BY T1.IDvehicule, Month(T1.DatePlein);

La 5ème requête qui donne le résultat pour la 2ème demande :

SELECT T2.IDvehicule, Month(T2.DatePlein1) AS DateMois,
(T4.Compteur-T1.Compteur) AS distance, T2.ConsoMois
FROM TaTable AS T1 INNER JOIN (aaarConso3 AS T2
INNER JOIN (aaarConso0 AS T3 INNER JOIN TaTable AS T4
ON (T3.IDvehicule=T4.IDvehicule)
AND (DateAdd("d",T3.DiffDate,T3.DatePlein)=T4.DatePlein))
ON (T2.IDvehicule=T3.IDvehicule) AND (T2.DatePlein2=T3.DatePlein))
ON (T1.IDvehicule=T2.IDvehicule) AND (T1.DatePlein=T2.DatePlein1)
ORDER BY T2.IDvehicule, Month(T2.DatePlein1);

Avatar
Michel_D
Bonjour,

Bonsoir à tou(te)s,

Je rencontre a priori un problème pour concevoir une table et une
requête calculée.

La table en question doit permettre, pour chacun de nos véhicules, de
relever le kilométrage, la quantité de carburant (plein dans une
station) en fonction de la date.
J'ai pensé créer ma table de la façon suivante :
table RELEVÉ(N°chrono, N°véhicule, date, relevé km, quantité carburant)

Concernant la requête, je souhaite pouvoir calculer le nombre de
kilomètres parcourus, entre l'avant-dernière et la dernière date de
relevé, ainsi que la quantité de carburant. Par la suite connaitre
aussi mois par mois le kilométrage parcouru ainsi que la quantité
totale de carburant.

Mais là, je suis totalement perdu. Je ne sais pas comment monter cette
requête.

Quelqu'un pourrait-il me guider ou me conseiller?



Voici ce que je te propose en plusieurs requêtes (à adapter) :

La 1ère requête intermédiaire nommée "aaarConso0" :

SELECT T1.IDvehicule, T1.DatePlein AS DatePlein,
Min(DateDiff("d",T1.DatePlein,T2.DatePlein)) AS DiffDate
FROM TaTable AS T1 INNER JOIN TaTable AS T2
ON (T1.IDvehicule=T2.IDvehicule) AND (T1.DatePlein<T2.DatePlein)
GROUP BY T1.IDvehicule, T1.DatePlein
ORDER BY T1.IDvehicule, T1.DatePlein DESC;

La 2ème requête intermédiaire nommée "aaarConso1" :

SELECT T1.IDvehicule, T1.DatePlein,
DateAdd("d",T1.DiffDate,T1.DatePlein) AS derDatePlein
FROM aaarConso0 AS T1
WHERE T1.DatePlein
In (SELECT Max(DatePlein) FROM aaarConso0 GROUP BY IDvehicule)
ORDER BY T1.IDvehicule;

La 3ème requête qui donne le résultat pour la 1ère demande :

SELECT T2.IDvehicule, T2.DatePlein, T2.derDatePlein,
(T3.Compteur-T1.Compteur) AS distance, T1.Quantite AS conso
FROM TaTable AS T1 RIGHT JOIN (aaarConso1 AS T2 LEFT JOIN TaTable AS T3
ON (T2.derDatePlein=T3.DatePlein) AND (T2.IDvehicule=T3.IDvehicule))
ON (T1.DatePlein=T2.DatePlein) AND (T1.IDvehicule=T2.IDvehicule);

La 4ème requête intermédiaire nommée "aaarConso4" :



correction c'est la 4ème requête intermédiaire nommée "aaarConso3" :


SELECT T1.IDvehicule, Min(T1.DatePlein) AS DatePlein1,
Max(T1.DatePlein) AS DatePlein2, Sum(T1.Quantite) AS ConsoMois
FROM TaTable AS T1
GROUP BY T1.IDvehicule, Month(T1.DatePlein);

La 5ème requête qui donne le résultat pour la 2ème demande :

SELECT T2.IDvehicule, Month(T2.DatePlein1) AS DateMois,
(T4.Compteur-T1.Compteur) AS distance, T2.ConsoMois
FROM TaTable AS T1 INNER JOIN (aaarConso3 AS T2
INNER JOIN (aaarConso0 AS T3 INNER JOIN TaTable AS T4
ON (T3.IDvehicule=T4.IDvehicule)
AND (DateAdd("d",T3.DiffDate,T3.DatePlein)=T4.DatePlein))
ON (T2.IDvehicule=T3.IDvehicule) AND (T2.DatePlein2=T3.DatePlein))
ON (T1.IDvehicule=T2.IDvehicule) AND (T1.DatePlein=T2.DatePlein1)
ORDER BY T2.IDvehicule, Month(T2.DatePlein1);



Avatar
Access13090
Michel_D avait écrit le 29/03/2008 :
Bonjour,

Bonsoir à tou(te)s,

Je rencontre a priori un problème pour concevoir une table et une requête
calculée.

La table en question doit permettre, pour chacun de nos véhicules, de
relever le kilométrage, la quantité de carburant (plein dans une station)
en fonction de la date.
J'ai pensé créer ma table de la façon suivante :
table RELEVÉ(N°chrono, N°véhicule, date, relevé km, quantité carburant)

Concernant la requête, je souhaite pouvoir calculer le nombre de
kilomètres parcourus, entre l'avant-dernière et la dernière date de
relevé, ainsi que la quantité de carburant. Par la suite connaitre aussi
mois par mois le kilométrage parcouru ainsi que la quantité totale de
carburant.

Mais là, je suis totalement perdu. Je ne sais pas comment monter cette
requête.

Quelqu'un pourrait-il me guider ou me conseiller?



Voici ce que je te propose en plusieurs requêtes (à adapter) :

La 1ère requête intermédiaire nommée "aaarConso0" :

SELECT T1.IDvehicule, T1.DatePlein AS DatePlein,
Min(DateDiff("d",T1.DatePlein,T2.DatePlein)) AS DiffDate
FROM TaTable AS T1 INNER JOIN TaTable AS T2
ON (T1.IDvehicule=T2.IDvehicule) AND (T1.DatePlein<T2.DatePlein)
GROUP BY T1.IDvehicule, T1.DatePlein
ORDER BY T1.IDvehicule, T1.DatePlein DESC;

La 2ème requête intermédiaire nommée "aaarConso1" :

SELECT T1.IDvehicule, T1.DatePlein,
DateAdd("d",T1.DiffDate,T1.DatePlein) AS derDatePlein
FROM aaarConso0 AS T1
WHERE T1.DatePlein
In (SELECT Max(DatePlein) FROM aaarConso0 GROUP BY IDvehicule)
ORDER BY T1.IDvehicule;

La 3ème requête qui donne le résultat pour la 1ère demande :

SELECT T2.IDvehicule, T2.DatePlein, T2.derDatePlein,
(T3.Compteur-T1.Compteur) AS distance, T1.Quantite AS conso
FROM TaTable AS T1 RIGHT JOIN (aaarConso1 AS T2 LEFT JOIN TaTable AS T3
ON (T2.derDatePlein=T3.DatePlein) AND (T2.IDvehicule=T3.IDvehicule))
ON (T1.DatePlein=T2.DatePlein) AND (T1.IDvehicule=T2.IDvehicule);

La 4ème requête intermédiaire nommée "aaarConso4" :



correction c'est la 4ème requête intermédiaire nommée "aaarConso3" :


SELECT T1.IDvehicule, Min(T1.DatePlein) AS DatePlein1,
Max(T1.DatePlein) AS DatePlein2, Sum(T1.Quantite) AS ConsoMois
FROM TaTable AS T1
GROUP BY T1.IDvehicule, Month(T1.DatePlein);

La 5ème requête qui donne le résultat pour la 2ème demande :

SELECT T2.IDvehicule, Month(T2.DatePlein1) AS DateMois,
(T4.Compteur-T1.Compteur) AS distance, T2.ConsoMois
FROM TaTable AS T1 INNER JOIN (aaarConso3 AS T2
INNER JOIN (aaarConso0 AS T3 INNER JOIN TaTable AS T4
ON (T3.IDvehicule=T4.IDvehicule)
AND (DateAdd("d",T3.DiffDate,T3.DatePlein)=T4.DatePlein))
ON (T2.IDvehicule=T3.IDvehicule) AND (T2.DatePlein2=T3.DatePlein))
ON (T1.IDvehicule=T2.IDvehicule) AND (T1.DatePlein=T2.DatePlein1)
ORDER BY T2.IDvehicule, Month(T2.DatePlein1);



Bonjour Michel,
Merci beaucoup.
Je vais essayer vos solutions
Cordialement