Aqui algo que realizamos en la oficina y que me parece super interesante, Recursividad de una funcion en Postgres.
Lo que hace es buscar una fecha en una tabla, si no la encuetnra resta dias y continua la busqueda hasta que encuentra le fecha.
CREATE OR REPLACE FUNCTION general.get_tipo_cambio_recursivo(xc_empresa character varying, xfecha date)
RETURNS numeric AS
$BODY$
declare
xc_empresa alias for $1;
xfecha alias for $2;
rstemp record;
xtipocambio numeric;
xfecha_recursiva date;
begin
xtipocambio=0;
for rstemp in select venta_contable from maestros.tipo_cambio
where estado=1 and c_empresa=xc_empresa and f_tc=xfechaloop
xtipocambio=rstemp.venta_contable;end loop;
if (xtipocambio is null or xtipocambio=0) then
xfecha_recursiva=xfecha-1;end if;
xtipocambio=general.get_tipo_cambio_recursivo(xc_empresa, xfecha_recursiva);
return xtipocambio;
end
$BODY$
LANGUAGE plpgsql VOLATILEContinúa...
COST 100;