Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Requêtes et SQL.
Requêtes et SQL. Tout ce qui concerne vos questions sur les requêtes et le SQL sous Access se trouve ici.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/07/2011, 13h50   #1
Membre habitué
 
Homme Christian Roignot
Logisticien
Inscription : janvier 2009
Messages : 308
Détails du profil
Informations personnelles :
Nom : Homme Christian Roignot
Âge : 59
Localisation : France

Informations professionnelles :
Activité : Logisticien
Secteur : Industrie

Informations forums :
Inscription : janvier 2009
Messages : 308
Points : 112
Points : 112
Par défaut Calculer l'écart entre 2 dates

Bonjour,

Comment calculer l'écart entre 2 dates qui sont dans la même colonne.
J'ai une table avec les champs suivants:
- DateRecp
- Journée
- CAP

Dans ma requête SQL, j'ai essayé DiffDate de la façon suivante:
Code :
1
2
 
Ecart:DiffDate("j";[DateRecp];[DateRecp])
j'ai comme résultat: 0, ce qui est logique.

Comment faire pour trouver l'écart entre les 2 dates?

Merci d'avance de votre aide.
rch05 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2011, 15h13   #2
Membre confirmé
 
Homme
Chercheur
Inscription : juin 2011
Messages : 150
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Tarn (Midi Pyrénées)

Informations professionnelles :
Activité : Chercheur
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : juin 2011
Messages : 150
Points : 231
Points : 231
Bonjour,

C'est réalisable en utilisant les fonctions de domaine, en l'occurrence RechDom me semble la plus adaptée d'après vos éléments.

Bcdt
fbtsra est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2011, 15h17   #3
Membre habitué
 
Homme Christian Roignot
Logisticien
Inscription : janvier 2009
Messages : 308
Détails du profil
Informations personnelles :
Nom : Homme Christian Roignot
Âge : 59
Localisation : France

Informations professionnelles :
Activité : Logisticien
Secteur : Industrie

Informations forums :
Inscription : janvier 2009
Messages : 308
Points : 112
Points : 112
Re bonjour,

J'ai trouvé dans le livre "SQL par l'exemple" de A. Molinaro un exemple.

C'est de "déterminer le nombre de jours séparant les dates de l'enregistrement courant et du suivant", que je n'arrive pas à appliquer pour ma problématique.
Code :
1
2
3
4
5
6
7
8
9
 
SELECT x.*, 
DateDiff("j",x.date_deb,x.de_suivante) AS Ecart
FROM (SELECT DateRecp, Journée,CAP,
(SELECT min(d.date_deb) from tblUnité
WHERE d.date_deb > DateRecp) de_suivante
from tblUnité
WHERE CAP = "A9"
)  AS x;
Quelqu'un a t-il une idée?
Merci de votre aide
rch05 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 21/07/2011, 18h41   #4
Expert Confirmé Sénior
 
Avatar de f-leb
 
Homme Fabien
Enseignant
Inscription : janvier 2009
Messages : 2 415
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 41
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : janvier 2009
Messages : 2 415
Points : 4 446
Points : 4 446
rebonjour Christian,

quelques idées à tester...

Code sql :
1
2
(SELECT min(d.date_deb) from tblUnité as d
WHERE d.date_deb > DateRecp) de_suivante

peut-être même:
Code sql :
1
2
(SELECT min(d.date_deb) from tblUnité as d
WHERE d.date_deb > DateRecp AND d.CAP="A9") de_suivante
f-leb est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 22/07/2011, 09h56   #5
Membre habitué
 
Homme Christian Roignot
Logisticien
Inscription : janvier 2009
Messages : 308
Détails du profil
Informations personnelles :
Nom : Homme Christian Roignot
Âge : 59
Localisation : France

Informations professionnelles :
Activité : Logisticien
Secteur : Industrie

Informations forums :
Inscription : janvier 2009
Messages : 308
Points : 112
Points : 112
Bonjour Fabien,

j'ai trouvé 2 solutions qui me donnent le résultat attendu.
Par-contre cela me bloque access (temps de réponse énorme quand je clic dans la feuille de donnée ou accéder au pgm )???
Peut-être est-ce du au nbr d'enregistrement (+ de 200 000)

La 1er solution est celle que j'ai posté, j'ai apporté ta modif et une autre.
Code :
1
2
3
4
5
6
7
8
9
10
 
SELECT x.*, 
DateDiff("D",x.DateRecp,x.de_suivante) AS Ecart
FROM (
SELECT DateRecp, Journée,CAP,
(SELECT min(d.DateRecp) from tblUnité as d
WHERE d.DateRecp > e.DateRecp) AS de_suivante
from tblUnité as e
WHERE CAP = "A9"
)  AS x;
Cette requête me créer 4 colonnes.
-La 1er date
-la date suivante
-la col Ecart (différence entre les deux dates)
-la col CAP (critère)

La 2ème solution qui donne le même résultat et le même souci (bloque access)
Code :
1
2
3
4
5
6
7
8
9
10
 
SELECT x.*, 
x.de_suivante – x.DateRecp AS Ecart
FROM (
SELECT DateRecp, Journée,CAP,
(SELECT min(d.DateRecp) from tblUnité as d
WHERE d.DateRecp > e.DateRecp) AS de_suivante
from tblUnité as e
WHERE CAP = "A9"
)  AS x;
Ma question est de savoir pourquoi Access a un temps de réponse énorme (même quand les requêtes sont terminées)

Ha, une autre question : Comment fais-tu la différence entre Code SQL: et le Code VBA:, dans la balise code

Merci
rch05 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/07/2011, 10h30   #6
Membre habitué
 
Homme Christian Roignot
Logisticien
Inscription : janvier 2009
Messages : 308
Détails du profil
Informations personnelles :
Nom : Homme Christian Roignot
Âge : 59
Localisation : France

Informations professionnelles :
Activité : Logisticien
Secteur : Industrie

Informations forums :
Inscription : janvier 2009
Messages : 308
Points : 112
Points : 112
re Fabien,

Bon, après quelques tests, j'ai suis passé par une table intermédiaire.
C'est à dire, que selon le (les) critère(s) j'inserre mes données dans une table intermédiaire.
Puis, j'exécute l'une des 2 requêtes sur cette table.
Je n'ai plus le problème du temps de réponse et Access ne se bloque plus.

Je pense que je vais en rester là, sauf si il y a une autre solution
Qu'en penses-tu?
rch05 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/07/2011, 15h01   #7
Expert Confirmé Sénior
 
Avatar de f-leb
 
Homme Fabien
Enseignant
Inscription : janvier 2009
Messages : 2 415
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 41
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : janvier 2009
Messages : 2 415
Points : 4 446
Points : 4 446
Bonjour,

à part peut-être rajouter un index sur DateRecp et un autre sur CAP si ce n’est déjà fait, je ne vois pas mieux , désolé.
f-leb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/07/2011, 04h41   #8
Membre habitué
 
Homme Christian Roignot
Logisticien
Inscription : janvier 2009
Messages : 308
Détails du profil
Informations personnelles :
Nom : Homme Christian Roignot
Âge : 59
Localisation : France

Informations professionnelles :
Activité : Logisticien
Secteur : Industrie

Informations forums :
Inscription : janvier 2009
Messages : 308
Points : 112
Points : 112
Bonjour Fabien,

Bon, je vais clore la discussion.
Pour l'instant, je vais continuer avec cette table intermédiaire.
Je reviendrai plus tard, afin de voir si cela est possible d'améliorer ce module.
Le "Chef" attend des résultats..........

Merci de ton aide
@+
rch05 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/07/2011, 11h41   #9
Expert Confirmé Sénior
 
Avatar de f-leb
 
Homme Fabien
Enseignant
Inscription : janvier 2009
Messages : 2 415
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 41
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : janvier 2009
Messages : 2 415
Points : 4 446
Points : 4 446
bonjour Christian,

je n'ai peut-être pas bien saisi l'objectif mais dans la sous-requête:
Code sql :
1
2
(SELECT min(d.DateRecp) FROM tblUnité AS d
WHERE d.DateRecp > e.DateRecp) AS de_suivante

tu vas rechercher les dates suivantes parmi toutes les occurences de tblUnité même parmi celles où CAP est différent de "A9"

par exemple: date=01/01/2011 (CAP="A9") et De_suivante=02/01/2011 (mais CAP="A10" par exemple pour cette date suivante)

C'est pour cela que j'avais proposé:
Code sql :
1
2
(SELECT min(d.DateRecp) from tblUnité as d
WHERE d.DateRecp > e.DateRecp AND d.CAP="A9") AS de_suivante

pour le coup, la requête devrait être plus rapide avec cette restriction mais peut-être me trompé-je dans le raisonnement avec ce champ CAP?
f-leb est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h38.


 
 
 
 
Partenaires

Hébergement Web