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 08/05/2011, 00h31   #1
Nouveau Membre du Club
 
Inscription : janvier 2011
Messages : 145
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 145
Points : 25
Points : 25
Par défaut auto jointure dans une meme colonne

Bonsoir

Je dois réaliser une auto jointure dans une même colonne . Cela comprend un code animal , une date de visite et un numeros proproe a chaque visite.

exemple pour illustrer :

table VISITE

Citation:
idanimal / datevisite / numvis
chat1 10/12/2003 numvis0
chat1 22/12/2003 numvis1
chat1 15/3/2004 numvis2
chat2 17/5/2003 numvis3
chien1 1/2/2003 numvis4
chien1 10/10/2003 numvis5
chien2 2/2/2003 numvis6
chien2 3/4/2004 numvis7
poule1 1/1/2003 numvis8
L'enoncé impose d'afficher le code de l'animal , la temps entre 2 visites en jour ainsi que les deux dates sur les quel je fais le calcul. D'autre part l'énoncé impose aussi de travailler avec une seule et même table.

Prenons des cas concrets :

Pour le chat 1 on aura la différence en jour entre les visites numvis0/numvis1 , numvis1/numvis2 , numvis0/numvis2
Pour le chien 2 entre numvis6/numvis 7
Pour la poule 1 avec numvis8 seul qui retournera 0 jour car il n'y pas eu d'autre visite.

J'ai fait la requete suivante :

Code :
1
2
3
4
SELECT DISTINCT idanimal , DATEDIFF('d',datevisite,datevisite)
FROM  VISITE 
            INNER JOIN VISITE
            ON VISITE.idanimal = VISITE.idanimal;
Avec une auto jointure sur la colonne elle même

Mais c'est sans succes ACCESS me dit qu'il ne supporte pas la requete ( , forcement si la syntaxe est fausse )

Merci d'avance

PS : les inner join ne sont pas ma tasse de the
tanaka59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/05/2011, 10h26   #2
Membre Expert
 
Homme Jacques Petiot
Indépendant développeur et formateur
Inscription : octobre 2007
Messages : 891
Détails du profil
Informations personnelles :
Nom : Homme Jacques Petiot
Âge : 51
Localisation : France

Informations professionnelles :
Activité : Indépendant développeur et formateur
Secteur : Conseil

Informations forums :
Inscription : octobre 2007
Messages : 891
Points : 1 333
Points : 1 333
Hello
voilà une solution avec une seule table
Code :
1
2
3
4
SELECT Table1.idanimal, Table1.datevisite, 
DMax("datevisite","table1","idanimal = '" & [idanimal] & "'") AS dernière_visite, 
DMax("datevisite","table1","idanimal = '" & [idanimal] & "' AND datevisite < #" & [datevisite] & "#") AS précédente_visite, DateDiff('d',[précédente_visite],[dernière_visite]) AS intervalle
FROM Table1;
peut être est ce que je ne fais pas la bonne différence, à toi de voir et de modifier
et une autre avec deux fois la même (elle semble plus simple en mode création mais elle ne donne pas le même résultat)
Code :
1
2
3
4
SELECT Table1.idanimal, Max(Table1.datevisite) AS dernière_visite, Max(Table1_1.datevisite) AS précédente_visite, DateDiff('d',[dernière_visite],[précédente_visite]) AS intervalle
FROM Table1 INNER JOIN Table1 AS Table1_1 ON Table1.idanimal = Table1_1.idanimal
WHERE (((Table1_1.datevisite)<[Table1].[datevisite]))
GROUP BY Table1.idanimal;
__________________
-------------------Simplifi----------comme si tout était simple--------
Simplifi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/05/2011, 22h57   #3
Nouveau Membre du Club
 
Inscription : janvier 2011
Messages : 145
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 145
Points : 25
Points : 25
Bonsoir

J'ai bidouiller avec la requête que vous m'aviez proposé , effectivement cela marche à merveille.

Merci
tanaka59 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 12h49.


 
 
 
 
Partenaires

Hébergement Web