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