wiki:Recursive
CREATE FUNCTION rht.abondance_amont(integer) RETURNS integer AS
$fonction$
                WITH parcours(id_drain, abondance_amont) AS
                (
                               WITH RECURSIVE parcours(id_drain, abondance_amont) AS
                              (
                                               SELECT id_drain, abondance FROM rht.crosstab_rhtvs2 WHERE id_drain = $1

                                               UNION

                                               SELECT crosstab_rhtvs2.id_drain, crosstab_rhtvs2.abondance FROM rht.crosstab_rhtvs2, parcours 
                                               JOIN rht.crosstab_rhtvs2 AS t1 
                                               ON parcours.id_drain =  t1.id_drain 
                                               WHERE ST_Intersects(ST_Line_Interpolate_Point(t1.the_geom, 0), ST_Line_Interpolate_Point(crosstab_rhtvs2.the_geom, 1)) 
                                               AND t1.the_geom && crosstab_rhtvs2.the_geom 
                                               AND t1.exutoire = crosstab_rhtvs2.exutoire
                               ) SELECT DISTINCT id_drain, abondance_amont  FROM parcours
                ) SELECT ROUND(SUM(abondance_amont))::integer  FROM parcours;
$fonction$
LANGUAGE SQL STABLE;

http://www.postgresqltutorial.com/postgresql-recursive-query/

Last modified 7 years ago Last modified on Jun 23, 2018 6:58:24 AM