Pages: 1
- Sujet précédent - [SQL] Dates la plus récente avec jointures sur plusieurs tables - Sujet suivant
#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
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
Pages: 1
- Sujet précédent - [SQL] Dates la plus récente avec jointures sur plusieurs tables - Sujet suivant