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

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Fri 24 July 2015 10:24

dungeonkeeper81
Participant actif
Lieu: Lausanne
Date d'inscription: 12 Jan 2011
Messages: 70
Site web

[SQL] Dates la plus récente avec jointures sur plusieurs tables

Bonjour,

Je n'arrive pas à construire correctement une requête contenant jointure et sous-requête dans postgreSQL/postGIS.

Je cherche à sélectionner plusieurs enregistrements d'une table (objet) par rapport à leur date la plus récente d'intervention située dans une autre table (suivi).

Voici le modèle et le résultat escompté:

[img]http://www.forumsig.org/attachment.php?attachmentid=7762&d=1437725133[/img]   [img]http://www.forumsig.org/attachment.php?attachmentid=7763&d=1437725158[/img]

[img]http://www.forumsig.org/attachment.php?attachmentid=7764&d=1437725177[/img]


J'ai commencé par décomposé la requête en deux parties :

1) Sélection des suivis avec la date d'intervention la plus récente: SELECT DISTINCT ON (fk_objet)* FROM suivi ORDER BY fk_objet, "date_intervention" DESC;

2) Requête de jointure des objets et des suivis : SELECT objet.*, suivi.* FROM objet, suivi WHERE objet.id = suivi.fk_objet


Maintenant, je bloque sérieusement sur la construction de la requête en une seule pièce.

Toutes aides sera la bienvenue, je double-post sur forumSIG* et developpez.com** et je continue de chercher. Merci.

* http://www.forumsig.org/showthread.php/ … urs-tables
**

Hors ligne

 

#2 Fri 24 July 2015 10:35

Martin Bocquet
Participant occasionnel
Date d'inscription: 4 Mar 2015
Messages: 22

Re: [SQL] Dates la plus récente avec jointures sur plusieurs tables

Bonjour,

la requête peut d'écrire comme cela :

Code:

SELECT objet.*, suivi.* 
FROM objet
JOIN (SELECT DISTINCT ON (fk_objet)* FROM suivi ORDER BY fk_objet, "date_intervention" DESC) AS suivi
ON objet.id = suivi.fk_objet

Dernière modification par Martin Bocquet (Fri 24 July 2015 10:37)

Hors ligne

 

#3 Fri 24 July 2015 10:50

dungeonkeeper81
Participant actif
Lieu: Lausanne
Date d'inscription: 12 Jan 2011
Messages: 70
Site web

Re: [SQL] Dates la plus récente avec jointures sur plusieurs tables

Merci Martin Bocquet, ça fonctionne nickel chrome.

J'avais pourtant cherché dans la littérature et le web, mais je m'étais perdu dans trop d'informations.

Bon week-end.

Dernière modification par dungeonkeeper81 (Fri 24 July 2015 10:51)

Hors ligne

 

#4 Fri 24 July 2015 11:26

dungeonkeeper81
Participant actif
Lieu: Lausanne
Date d'inscription: 12 Jan 2011
Messages: 70
Site web

Re: [SQL] Dates la plus récente avec jointures sur plusieurs tables

J'ai été trop vite dans ma réponse.

Votre requête fonctionne mais ne renvois pas l'enregistrement avec la date la plus récente.

En fait le résultat est le même que dans une requête de jointure simple.

Hors ligne

 

#5 Fri 24 July 2015 12:01

JP LLORENS
Participant assidu
Date d'inscription: 12 Nov 2008
Messages: 231

Re: [SQL] Dates la plus récente avec jointures sur plusieurs tables

Bonjour.
La solution ne serait-elle pas de faire un max du champ date plutôt qu'un distinct ?
JP

Dernière modification par JP LLORENS (Fri 24 July 2015 12:01)

Hors ligne

 

#6 Fri 24 July 2015 13:57

Dof
Participant assidu
Lieu: Grenoble
Date d'inscription: 28 Oct 2009
Messages: 317
Site web

Re: [SQL] Dates la plus récente avec jointures sur plusieurs tables

Bonjour,
Je ne vois pas les images que vous avez posté.
Ceci dit, d'après ce que je comprend, il faut faire un Max sur la date, puis faire la jointure

SELECT fk_objet, Max(date_intervention) as max_date FROM suivi
GROUP BY fk_object

Là vous avez donc la date max, et l'id de l'objet. Il ne reste plus qu'a joindre tout ça.

Code:

SELECT objet.*, suivi.* 
FROM objet
JOIN  suivi ON objet.id = suivi.fk_objet
JOIN (SELECT fk_objet, Max(date_intervention) as max_date FROM suivi GROUP BY fk_object) suivi_max ON suivimax.fk_objet = suivi.fk_objet AND suivimax.max_date = suivi.date_intervention

Dernière modification par Dof (Fri 24 July 2015 13:58)

Hors ligne

 

#7 Fri 24 July 2015 14:39

dungeonkeeper81
Participant actif
Lieu: Lausanne
Date d'inscription: 12 Jan 2011
Messages: 70
Site web

Re: [SQL] Dates la plus récente avec jointures sur plusieurs tables

La solution a été trouvée sur developpez.com

http://www.developpez.net/forums/d15340 … -jointure/

Comme il y a plusieurs chemins pour arriver au même résultat, je vous remercie pour vos réponses qui ont toutes retenues mon intérêt.

Excellent week-end.

Hors ligne

 

Pied de page des forums

Powered by FluxBB