Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Printemps des cartes 2024

#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

Yves
Membre du bureau
Lieu: Aix-les-Bains
Date d'inscription: 22 Mar 2006
Messages: 9855
Site web

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: 3169
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

Cottencin Denis a écrit:

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

 

Pied de page des forums

Powered by FluxBB