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 08 October 2021 16:04

neskuik01
Participant assidu
Date d'inscription: 16 Feb 2015
Messages: 199

jointure sur predicat geométrique

Bonjour,

Ma question va vraiment paraitre bête mais bon.  J'ai du mal avec la logique des types de jointure couplé au prédicat géométrique.

J'ai une table A (4000 objets à l'intérieure B) et une table B (19 000 objets)

Je veux selectionner tous les éléments de B et prendre les éléments de A contenu dans B en ne prenant que les valeurs max pour le champ date de A grouper selon l'identifiant de B (en gros si j'ai deux points A  dans un polygone B je veux que seule la valeur max soit prise en compte ).

j'ai fait une requête :

Code:

select 
b.id, 
max(a.date_obs)
from tableB b
LEFT JOIN tableA a
ON 
st_within(a.geom,b.geom)
group by b.id

et je me retrouve avec seulement 1960 objets , alors que j'en attends 19 000 dont 4000 avec une valeur de dates non nulle.

Dernière modification par neskuik01 (Fri 08 October 2021 16:24)

Hors ligne

 

#2 Fri 08 October 2021 16:24

Ben22
Participant actif
Lieu: 33
Date d'inscription: 11 May 2016
Messages: 96

Re: jointure sur predicat geométrique

Bonjour,

Personnellement, je décomposerai avec une sous requête :

Code:

WITH hello AS (SELECT b.id, max(a.date) as max_date FROM b JOIN a ON st_within(a.the_geom, b.the_geom) GROUP BY b.id) -- uniquement les valeur datemax pour chaque b en contenant

SELECT b.id, hello.max_date FROM b LEFT JOIN hello ON b.id = hello.id -- je les joint aux autres valeurs b

En espérant avoir bien saisi le résultat que vous attendiez...

Bien à vous

Hors ligne

 

#3 Fri 08 October 2021 16:35

neskuik01
Participant assidu
Date d'inscription: 16 Feb 2015
Messages: 199

Re: jointure sur predicat geométrique

Ben22 a écrit:

Bonjour,

Personnellement, je décomposerai avec une sous requête :

Code:

WITH hello AS (SELECT b.id, max(a.date) as max_date FROM b JOIN a ON st_within(a.the_geom, b.the_geom) GROUP BY b.id) -- uniquement les valeur datemax pour chaque b en contenant

SELECT b.id, hello.max_date FROM b LEFT JOIN hello ON b.id = hello.id -- je les joint aux autres valeurs b

En espérant avoir bien saisi le résultat que vous attendiez...

Bien à vous


Parfait smile !

Hors ligne

 

Pied de page des forums

Powered by FluxBB