Re: Mensajes a la lista de Ayuda - Tema Consulta recursiva

From: Kernel <jucabapa(at)gmail(dot)com>
To: Cachique <cachique(at)gmail(dot)com>, Ayuda <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Mensajes a la lista de Ayuda - Tema Consulta recursiva
Date: 2016-10-23 17:23:31
Message-ID: b2549904-ff0f-154f-6d3b-4116f364df43@gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

El 21/10/2016 a las 19:44, Cachique escribió:
> Hola.
>
> Disculpa que te contacte directo a tu mail pero coloque en la lista de
> ayuda un query que soluciona tu problema y es como si no lo hubieras visto.
> Hace un tiempo que tengo la impresion de que mis mensajes no llegan a la
> lista por alguna razon y tampoco me genera un error de envio.
>
> Podrias confirmar si recibiste desde la lista un mensaje de mi direccion
> con el query que pides?
>
> De cualquier manera te lo copio aqui pero esa confirmacion de llegada
> será muy importante para mi.
>
> Saludos,
> Walter
>
> Query Recursivo
>
> 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)
>

Lo primero darte las gracias por tu ayuda, vi tu correo, pero a primera
vista (NO TENIA ni idea de recursividad, ahora un pelin) pensé que no
era buena solución, al ver el primer select con los 3 grupos asocie los
3 grupos a los niveles de profundidad.

Algunos totales no están bien, si te fijas hay que tener en cuenta
cuando los grupos son negativos, el 04 y el 05 no están bien

Le estoy dando vueltas a ir sacando las cuentas teniendo en cuenta el
signo del grupo, de tal forma que si la cuenta y el grupo que le llaman
son negativos , poner singo a ' ' y en el momento que solo sea negativo
uno de ellos poner el signo negativo, de esta forma al final la cuenta
suma o resta.

Gracias otra vez

-
Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda(at)postgresql(dot)org)
Para cambiar tu suscripcin:
http://www.postgresql.org/mailpref/pgsql-es-ayuda

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Lazaro Garcia 2016-10-24 15:07:53 Duda declaración de indice.
Previous Message Nahum Castro 2016-10-22 13:36:01 Re: [psycopg] OT? plpython2u