Re: Consulta recursiva

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
>

In response to

Browse pgsql-es-ayuda by date

  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