#1 Tue 04 December 2007 14:08
- Bastille
- Juste Inscrit !
- Lieu: Paris 7
- Date d'inscription: 4 Dec 2007
- Messages: 7
SQL Relation un à plusieurs vers un à un
Bonjour,
Je rencontre un pb SQL. Le voici :
. J'ai une table mère (A) en relation avec une table de positions de coordonnées géographique (B)
. La relation entre (A) et (B) est de un à plusieurs cad : une entité A possède plusieurs positions B à différentes dates.
. Je veux obtenir une vue Un à UN, cad avoir la dernière position temporelle B pour chaque entité A.
Je n'arrive pas à faire cette requete, notamment en utilisant un group by et having Max(Date loc) car je dois récuperer toutes les info B associés à A. Les agrégations faisant perdre la notion de "ligne d'enregistrement"
Auriez vous une solution ?
Merci
Géomaticien / développeur
Domaine de la Défense
Hors ligne
#2 Tue 04 December 2007 14:29
Re: SQL Relation un à plusieurs vers un à un
Bonjour,
Il vous faut faire une jointure, non ?
Y.
Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !! - GeoRezo vous aide ? Aidez GeoRezo !
Hors ligne
#3 Tue 04 December 2007 16:17
- ChristopheV
- Membre
- Lieu: Ajaccio
- Date d'inscription: 7 Sep 2005
- Messages: 3197
- Site web
Re: SQL Relation un à plusieurs vers un à un
Bonjour,
Oui ! une jointure et un critère de date, en SQL Access ça donne à peut près ça:
SELECT A.ID_A, B.PtrA, B.X, B.Y, B.time
FROM A INNER JOIN B ON A.ID_A = B.PtrA;
WHERE (((B.time)=[mydate]));
La clause groupby est utilisée pour les fonctions de regroupement (sum, count etc ...)
A+
Christophe
Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close
Hors ligne
#4 Tue 04 December 2007 16:52
- Cottencin Denis
- Juste Inscrit !
- Lieu: Saint Malo
- Date d'inscription: 9 Nov 2006
- Messages: 4
Re: SQL Relation un à plusieurs vers un à un
Une solution pour lier les données de la Table A avec les données de la table B qui ont les dates les plus récentes:
SELECT A.ID_A, B.X, B.Y ,..
FROM Table_A A INNER JOIN Table_B B ON A.ID_A = B.ID_A
WHERE B.DATE = (SELECT Max(DATE) FROM TABLE_B WHERE ID_A = A.ID_A);
(fonctionne sur Oracle)
Hors ligne
#5 Tue 04 December 2007 19:56
- Bastille
- Juste Inscrit !
- Lieu: Paris 7
- Date d'inscription: 4 Dec 2007
- Messages: 7
Re: SQL Relation un à plusieurs vers un à un
UN grand merci au corsaire de saint malo, cette requête répond très exactement à mon besoin. Je suis fier de constater qu'un geomaticien vos bien un informaticien !
Merci à toi Denis et aux autres qui se sont approchés de la solution.
Je recommande cette requête qui je pense n'est pas si simple et souvent utile.
Tristan
Géomaticien / développeur
Domaine de la Défense
Hors ligne
#6 Tue 04 December 2007 20:10
- Guillaume Sueur
- Participant assidu
- Lieu: Toulouse
- Date d'inscription: 23 Sep 2005
- Messages: 331
- Site web
Re: SQL Relation un à plusieurs vers un à un
quelquechose comme
SELECT * FROM a, b WHERE a.id = b.id ORDER by date DESC LIMIT 1
non ?
Guillaume SUEUR
Expert SIG et OpenSource
NEOGEO
46 RUE MATABIAU
31000 TOULOUSE
06 65 58 88 82
Site web : http://www.neogeo-online.net
Hors ligne
#7 Wed 05 December 2007 12:33
- Bastille
- Juste Inscrit !
- Lieu: Paris 7
- Date d'inscription: 4 Dec 2007
- Messages: 7
Re: SQL Relation un à plusieurs vers un à un
Une solution pour lier les données de la Table A avec les données de la table B qui ont les dates les plus récentes:
SELECT A.ID_A, B.X, B.Y ,..
FROM Table_A A INNER JOIN Table_B B ON A.ID_A = B.ID_A
WHERE B.DATE = (SELECT Max(DATE) FROM TABLE_B WHERE ID_A = A.ID_A);
(fonctionne sur Oracle)
La réponse est dans le code de Denis, je conseille de récupérer cette requete de référence
Géomaticien / développeur
Domaine de la Défense
Hors ligne