El 24/05/2012 11:05, Conrado Blasetti escribió:

Anthony, gracias por responder.

Justamente, cuando aplicamos el where, el sistema me devuelve solo el período seleccionado y no acumulando lo de períodos anteriores. Lo que necesitaría es (si es posible) resolver en el mismo sql la agrupación anterior, el detalle y la agrupación posterior

*De:* Anthony [mailto:[email protected]]
*Enviado el:* jueves, 24 de mayo de 2012 12:03
*Para:* Conrado Blasetti
*CC:* [email protected]
*Asunto:* Re: [pgsql-es-ayuda] Funcion ventana nueva consulta

El 24/05/2012 9:45, Conrado Blasetti escribió:

Julio, muchas gracias por responder.

Ahora, se me plantea una nueva duda con respecto a la sentencia (perdón por no haberla expuesto en el msg anterior)

Teniendo los datos de esta manera (se agrega una fecha)

drop table foo;

create table foo (

id serial not null,

tipo numeric(10) not null,

fecha date not null,

imp numeric(10,2) not null,

CONSTRAINT foo_id PRIMARY KEY (id)

);

insert into foo (fecha,tipo, imp) values ('01/01/2012'::date,1,30.5);

insert into foo (fecha,tipo, imp) values ('02/01/2012'::date,1,20.25);

insert into foo (fecha,tipo, imp) values ('03/01/2012'::date,2,30);

insert into foo (fecha,tipo, imp) values ('04/01/2012'::date,1,75.3);

insert into foo (fecha,tipo, imp) values ('05/01/2012'::date,1,75.3);

insert into foo (fecha,tipo, imp) values ('06/01/2012'::date,2,100);

insert into foo (fecha,tipo, imp) values ('15/04/2012'::date,1,30.5+7);

insert into foo (fecha,tipo, imp) values ('16/04/2012'::date,1,20.25+7);

insert into foo (fecha,tipo, imp) values ('17/04/2012'::date,2,30+7);

insert into foo (fecha,tipo, imp) values ('18/04/2012'::date,1,75.3+7);

insert into foo (fecha,tipo, imp) values ('19/04/2012'::date,1,75.3+7);

insert into foo (fecha,tipo, imp) values ('20/04/2012'::date,2,100+7);

insert into foo (fecha,tipo, imp) values ('22/05/2012'::date,1,30.5+17);

insert into foo (fecha,tipo, imp) values ('22/05/2012'::date,1,20.25+17);

insert into foo (fecha,tipo, imp) values ('23/05/2012'::date,2,30+17);

insert into foo (fecha,tipo, imp) values ('23/05/2012'::date,1,75.3+17);

insert into foo (fecha,tipo, imp) values ('24/05/2012'::date,1,75.3+17);

insert into foo (fecha,tipo, imp) values ('24/05/2012'::date,2,100+17);

SQL agregando la fecha.

select fecha,tipo1, tipo2, sum(imp) over (order by id)

  from (select id, fecha, imp as tipo1, 0 as tipo2, imp

          from foo

         where tipo= 1

         union

        select id, fecha, 0 as tipo1, imp as tipo2, imp*-1

          from foo

         where tipo= 2) Aux

La consulta es, cómo hacer para obtener datos "semi" detallados?

Digamos, quiero ver el detalle del mes 4, debería ejecutar el sql con el where correspondiente.

Pero el tema es que, la columna SUM, me acumula sobre los registros del where (es lógico porque es lo que le pido), estaría necesitando un acumulado de imp1 imp2 y sum() para lo anterior a abril, que se muestre el detalle de abril movimiento por movimiento (pero que el acumulado sume lo anterior) y luego otro acumulado de todo lo que hay después de abril de forma resumida, en este caso, todo ordenado por fecha, mostrando algo asi:

fecha

        

imp1

        

imp2

        

acumulado

        

tipo

null

        

201,35

        

130

        

71,35

        

RESUMEN


        
        
        
        

15/04/2012

        

37,5

        
        

108,85

        

detalle

16/04/2012

        

27,25

        
        

136,1

        

detalle

17/04/2012

        
        

37

        

99,1

        

detalle

18/04/2012

        

82,3

        
        

181,4

        

detalle

19/04/2012

        

82,3

        
        

263,7

        

detalle

20/04/2012

        
        

107

        

156,7

        

detalle


        
        
        
        

null

        

269,35

        

164

        

262,05

        

RESUMEN

        
        
        
        

Se podrá resolver también?

Nuevamente, gracias

Saludos,

Conrado



<http://www.uci.cu/>

bueno agrégale esto al final y ya
 where  fecha between    '2012-04-01' and '2012-04-30'

;-)
saludos

<http://www.uci.cu/>



<http://www.uci.cu/>
bueno tendras que hacer algo asi como:
(select null::date as fecha,tipo1, tipo2, sum(imp) over (order by id), 'Resumen'::text

  from (select id, fecha, imp as tipo1, 0 as tipo2, imp

          from foo

         where tipo= 1

         union

        select id, fecha, 0 as tipo1, imp as tipo2, imp*-1

          from foo

         where tipo= 2) as Aux

          where  fecha <=   '2012-04-01'  order by fecha desc limit 1)
          union all


(select fecha,tipo1, tipo2, sum(imp) over (order by id), 'Detalle'::text

  from (select id, fecha, imp as tipo1, 0 as tipo2, imp

          from foo

         where tipo= 1

         union

        select id, fecha, 0 as tipo1, imp as tipo2, imp*-1

          from foo

         where tipo= 2) Aux

          where  fecha between    '2012-04-01' and '2012-04-30')
          union all

(select null::date as fecha,tipo1, tipo2, sum(imp) over (order by id), 'Resumen'::text

  from (select id, fecha, imp as tipo1, 0 as tipo2, imp

          from foo

         where tipo= 1

         union

        select id, fecha, 0 as tipo1, imp as tipo2, imp*-1

          from foo

         where tipo= 2) as Aux

          where  fecha >=   '2012-04-30'  order by fecha desc limit 1)




 --         order by fecha desc



10mo. ANIVERSARIO DE LA CREACION DE LA UNIVERSIDAD DE LAS CIENCIAS 
INFORMATICAS...
CONECTADOS AL FUTURO, CONECTADOS A LA REVOLUCION

http://www.uci.cu
http://www.facebook.com/universidad.uci
http://www.flickr.com/photos/universidad_uci

Responder a