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
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 |