Message posté par : neskuik01
----------------------------------------
-----------------
Nicolas Ribot écrit :
Bonjour,
L'union ou union all est obligatoire dans une CTE recursive, c'est comme ca
qu'a chaque itération, le résultat précédent peut etre ajouté au résultat courant.
Plusieurs erreurs dans votre code:
• la cte déclare 3 champs alors que votre select en liste 5: les champs déclarés dans la
cte doivent correspondre aux champs des select de la CTE (vous pouvez omettre la
déclaration des champs dans la cte aussi)
• il manque une virgule avant le dernier champ du premier select (t.pollu_19).
• il manque une condition de stop je pense dans la partie UNION de la CTE: sans cela, la
recursion ne s'arrete jamais.
La logique de ce type de CTE n'est pas facile a comprendre je trouve: essayez sur un
exemple simple (peu de lignes dans la table de départ) pour vous familiariser avec ce
concept de récursion. (la doc donne qq exemples, avec notamment la gestion des conditions
de stop)
Nicolas
-----------------
Merci pour cet éclairage =). Effectivement j'ai procédé aux modifications
(j'exécute toujours sur des subsets).
Je pense que je me trompe dans la requête d'aggregation :
-----------------
Citation :
DROP TABLE turbi.flowAdd_v1;
CREATE TABLE turbi.flowAdd_v1 AS
WITH RECURSIVE additionflow
AS(
SELECT
tu.pk,
tu.pollu_19,
tu.id_bdcarth,
tu.id_nd_ini,
tu.id_nd_fin
from turbi."input" tu
LEFT JOIN turbi."input" t2
ON tu.id_nd_ini = t2.id_nd_fin
WHERE t2.id_nd_ini IS NULL
UNION
SELECT
tu.pk,
tu.pollu_19 ,
tu.id_bdcarth,
tu.id_nd_ini,
tu.id_nd_fin
FROM additionflow
JOIN turbi."input" tu
ON additionflow.id_nd_fin =tu.id_nd_ini
)
SELECT f.pk, f.id_bdcarth, f.pollu_19 FROM
(SELECT pk, id_bdcarth, SUM(pollu_19) pollu_19 FROM additionflow GROUP BY
id_bdcarth,pk) f
GROUP BY pollu_19,f.pk,f.id_bdcarth ORDER BY pollu_19 ;
select * from turbi.flowAdd_v1;
-----------------
Le résultat ne me retourne que de 0 ou 1 alors que je devrais avoir des 0, 1, 2,3 .. Je
soupçonne le "group by f.pk " d'être responsable .
----------------------------------------
Le message est situé
https://georezo.net/forum/viewtopic.php?pid=345971#p345971
Pour y répondre : geobd(a)ml.georezo.net ou reply de votre messagerie
Pour vous désabonner connectez-vous sur le forum puis Profil / Abonnement
--
Association GeoRezo - le portail géomatique
https://georezo.net