From: | Cachique <cachique(at)gmail(dot)com> |
---|---|
To: | Kernel <jucabapa(at)gmail(dot)com> |
Cc: | Ayuda <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | Re: Consulta recursiva |
Date: | 2016-10-20 19:10:45 |
Message-ID: | CAEfeRhVWo5PTB66HG55tFW7uac48irz+LXSU50c9f8nvdX5A7w@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Hola.
Te paso un query recursivo para que veas si te sirve.
with cte_grupos as (
with recursive rec_grupo (grupo, intermedio, sub) as -- obtener todos
los subgrupos de un grupo
(
select distinct grupo, grupo, grupo from pruebas -- Incluir al
mismo grupo como subgrupo
union all
select grupo, grupo, cuenta from pruebas -- Incluir los grupos
iniciales definidos como tales (clase = 'G')
where clase = 'G'
union all
select rg.grupo, p.grupo, p.cuenta -- Recorrer recursivamente los
subgrupos basado en el campo cuenta de los grupos
from pruebas p
join rec_grupo rg on (p.grupo = rg.sub)
where p.clase = 'G'
)
select distinct grupo, sub from rec_grupo -- Eliminar duplicados
)
select g.grupo, sum (case when signo = '-' then importe * -1 else importe
end) total -- Acumular los importes de los registros de clase 'C'
from cte_grupos g
join pruebas p on g.sub = p.grupo
where p.clase = 'C'
group by g.grupo
order by g.grupo
grupo | total
--------------+-------
01 | 200
02 | 250
03 | 249
04 | 249
05 | 1249
(5 rows)
Una cosa no me queda claro...
Que significa el '-' en los registros de tipo 'G' ?
Dependiendo de tu respuesta quizas se deba hacer una modificación.
Otro aspecto a considerar es el desempeño del query cuando hay muchos
registros. Otras personas en esta lista te podrán aconsejar mejor en ese
ambito
Saludos,
Walter
2016-10-20 15:59 GMT-03:00 Kernel <jucabapa(at)gmail(dot)com>:
> El 20/10/2016 a las 19:47, Alvaro Herrera escribió:
>
>> Kernel escribió:
>>
>>>
>>> Hola,
>>> no se si postgres permite una consultas recursivas.
>>>
>>
>> WITH RECURSIVE
>> https://www.postgresql.org/docs/9.5/static/sql-select.html#AEN86770
>>
>> No tengo tiempo de construir una consulta a partir de tu ejemplo ahora,
>> pero sí se puede.
>>
>>
> Ok, voy a ver si entiendo como funciona , de todas formas si alguien tiene
> un ejemplo sencillo le estaría muy agradecido ...
>
> Gracias
>
>
> -
> Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda(at)postgresql(dot)org
> )
> Para cambiar tu suscripción:
> http://www.postgresql.org/mailpref/pgsql-es-ayuda
>
From | Date | Subject | |
---|---|---|---|
Next Message | Freddy Martinez | 2016-10-20 19:12:17 | Re: Consulta recursiva |
Previous Message | Daymel Bonne Solís | 2016-10-20 19:05:46 | Re: Consulta recursiva |