Marcelo,

Não sei se ajuda, mas peguei esse script de aulas que ministro sobre
BD, veja se atente  a estrutura mostra uma tabela de emprestimo de
colaboradores que é semelhante a sua estrutura de extrato.

Segue script:

-- ddl
--DROP TABLE emprestimo_colaborador;
CREATE TABLE emprestimo_colaborador
(
 id_emprestimo_colaborador bigint
, id_colaborador            bigint        NOT NULL
    , dt_lancamento             date          NOT NULL
, tipo_lancamento           varchar(1)    NOT NULL
    , vlr_lancamento            numeric(14,2) NOT NULL
    , CONSTRAINT pk_emprestimo_colaborador_id_ec PRIMARY KEY
(id_emprestimo_colaborador)
);


--dml

-- efetuando lancamentos relativo a  emprestimo colaborador
INSERT INTO emprestimo_colaborador (id_emprestimo_colaborador,
id_colaborador, dt_lancamento, tipo_lancamento, vlr_lancamento) VALUES
(1,2,'2012-03-10','C', 50.00);
INSERT INTO emprestimo_colaborador (id_emprestimo_colaborador,
id_colaborador, dt_lancamento, tipo_lancamento, vlr_lancamento) VALUES
(2,2,'2012-03-25','C',150.00);
INSERT INTO emprestimo_colaborador (id_emprestimo_colaborador,
id_colaborador, dt_lancamento, tipo_lancamento, vlr_lancamento) VALUES
(3,2,'2012-04-05','D',-50.00);
INSERT INTO emprestimo_colaborador (id_emprestimo_colaborador,
id_colaborador, dt_lancamento, tipo_lancamento, vlr_lancamento) VALUES
(4,2,'2012-05-05','D',-50.00);
INSERT INTO emprestimo_colaborador (id_emprestimo_colaborador,
id_colaborador, dt_lancamento, tipo_lancamento, vlr_lancamento) VALUES
(5,2,'2012-06-05','D',-50.00);
INSERT INTO emprestimo_colaborador (id_emprestimo_colaborador,
id_colaborador, dt_lancamento, tipo_lancamento, vlr_lancamento) VALUES
(6,2,'2012-06-08','C',100.00);
INSERT INTO emprestimo_colaborador (id_emprestimo_colaborador,
id_colaborador, dt_lancamento, tipo_lancamento, vlr_lancamento) VALUES
(7,2,'2012-06-12','C',100.00);

-- efetuando lancamento relativo a emprestimo colaborador 2

-- efetuando lancamentos relativo a  emprestimo colaborador
INSERT INTO emprestimo_colaborador (id_emprestimo_colaborador,
id_colaborador, dt_lancamento, tipo_lancamento, vlr_lancamento) VALUES
(8,2,'2012-03-10','C', 50.00);
INSERT INTO emprestimo_colaborador (id_emprestimo_colaborador,
id_colaborador, dt_lancamento, tipo_lancamento, vlr_lancamento) VALUES
(9,2,'2012-03-25','C',150.00);
INSERT INTO emprestimo_colaborador (id_emprestimo_colaborador,
id_colaborador, dt_lancamento, tipo_lancamento, vlr_lancamento) VALUES
(10,2,'2012-04-05','D', 50.00);
INSERT INTO emprestimo_colaborador (id_emprestimo_colaborador,
id_colaborador, dt_lancamento, tipo_lancamento, vlr_lancamento) VALUES
(11,2,'2012-05-05','D', 50.00);
INSERT INTO emprestimo_colaborador (id_emprestimo_colaborador,
id_colaborador, dt_lancamento, tipo_lancamento, vlr_lancamento) VALUES
(12,2,'2012-06-05','D', 50.00);
INSERT INTO emprestimo_colaborador (id_emprestimo_colaborador,
id_colaborador, dt_lancamento, tipo_lancamento, vlr_lancamento) VALUES
(13,2,'2012-06-08','C',100.00);
INSERT INTO emprestimo_colaborador (id_emprestimo_colaborador,
id_colaborador, dt_lancamento, tipo_lancamento, vlr_lancamento) VALUES
(14,2,'2012-06-12','C',100.00);

-- TRUNCATE TABLE emprestimo_colaborador;
--dql

-- listando emprestimo

SELECT *
 FROM emprestimo_colaborador
    ;

-- listando saldo, com coluna informando débito e crédito, detalhado,
com acompanhamento do saldo, forma 01

   SELECT id_colaborador
        , dt_lancamento
, tipo_lancamento
, vlr_lancamento
,
(
 SELECT sum
      (
   CASE WHEN tipo_lancamento = 'D' THEN
vlr_lancamento * -1
                     WHEN tipo_lancamento = 'C' THEN
vlr_lancamento
    ELSE
0.00
   END
  )
       FROM emprestimo_colaborador
  WHERE dt_lancamento <= ec.dt_lancamento
    AND id_colaborador = 2
)  AS saldo
FROM emprestimo_colaborador AS ec
 ORDER BY dt_lancamento
   ;


-- listando saldo, com coluna informando débito e crédito, detalhado,
com acompanhamento do saldo, com mais detalhes forma 02

   SELECT id_colaborador
        , dt_lancamento
, tipo_lancamento
, CASE WHEN tipo_lancamento = 'C' THEN
vlr_lancamento
      ELSE
   0.00
 END AS credito
, CASE WHEN tipo_lancamento = 'D' THEN
vlr_lancamento
      ELSE
   0.00
 END AS debito
,
(
 SELECT sum
      (
   CASE WHEN tipo_lancamento = 'D' THEN
vlr_lancamento * -1
                     WHEN tipo_lancamento = 'C' THEN
vlr_lancamento
    ELSE
0.00
   END
  )
       FROM emprestimo_colaborador
  WHERE dt_lancamento <= ec.dt_lancamento
    AND id_colaborador = 2
)  AS saldo
FROM emprestimo_colaborador AS ec
 ORDER BY ec.dt_lancamento
   ;

No script acima vc pode mudar o campo date para timestamp.

Espero ter ajudado.



Em 26 de fevereiro de 2013 09:14, José Mello Júnior
<[email protected]> escreveu:
> Utilizando o Case e functions window para demonstrar o saldo, nem há
> necessidade de qualquer outra coisa.
>
> Att
>
> Em 26 de fevereiro de 2013 08:27, Ricardo Carlini Sperandio
> <[email protected]> escreveu:
>
>> Enviado pelo Motorola Razr
>> Em 25/02/2013 23:50, "Eduardo Almeida" <[email protected]>
>> escreveu:
>>
>>
>> >
>> > tente algo como
>> >
>> > SELECT
>> >         ( CASE WHEN ( flag = 'credito' ) THEN total ELSE 0 END) AS
>> > receitas,
>> >         ( CASE WHEN ( flag = 'debito' )  THEN total ELSE 0 END) AS
>> > despesas
>> >         FROM tbl_tabela
>> >         WHERE flag IN ('credito', 'debito') ;
>> >
>> >
>> >
>> >
>> > On 25/02/2013 23:30, Marcelo Silva wrote:
>> >>
>> >>
>> >>
>> >> From: Eduardo Almeida
>> >> Sent: Monday, February 25, 2013 11:20 PM
>> >> To: Comunidade PostgreSQL Brasileira
>> >> Subject: Re: [pgbr-geral] SQL Para extrato de C/C
>> >>
>> >> On 25/02/2013 16:19, Marcelo da Silva wrote:
>> >>>
>> >>> Pessoal, tenho um duvida simples porem gostaria da opinião dos
>> >>> amigos...
>> >>> Preciso montar um extrato estilo do banco Itau, mais ou menos assim
>> >>>
>> >>> Historico     A Pagar     A Receber    Diferença        Saldo
>> >>> teste1            0,00           10,00           10,00          10,00
>> >>> teste2         -25,00           20,00            -5,00           5,00
>> >>> ...
>> >>>
>> >>> Bem... como uso uma tabela só para guardar contas a pagar e receber, é
>> >>> simples pegar Debitos e Creditos,
>> >>> mas o resultado sai em um unica coluna, gostaria de ter o layout
>> >>> acima...
>> >>> Será que é possivel fazer no SQL ou terei que montar o relatorio na
>> >>> mão?
>> >>>
>> >>> O que tenho hoje é assim:
>> >>>
>> >>> teste 1    0,00
>> >>> teste 1  10,00
>> >>> teste 2  -25,00
>> >>> teste 2   20,00
>> >>> ...
>> >>
>> >>
>> >> E como você sabe o que é a pagar e o que é a receber?
>> >>
>> >>
>> >> Tem um Flag P/R (Pagar / Receber) na tabela
>> >>>
>> >>>
>> >>> Estive pensando em Union mas pelo que vejo não é isso...
>> >>> Com crossover de tabelas tambem não consegui chegar num resultado
>> >>> esperado
>> >>>
>> >>> :(
>> >>>
>> >>>
>> >>> Marcelo Silva
>> >>> ----------------------------------
>> >>>
>> >>>
>> >>>
>> >>> _______________________________________________
>> >>> pgbr-geral mailing list
>> >>> [email protected]
>> >>> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>> >>
>> >>
>> >>
>> >> --
>> >> Eduardo Almeida - Software Engineer
>> >> [email protected] - 27 3021-2430 / 27 9839 3755
>> >>
>> >> WEB2 Solutions - Inovando, sempre!
>> >>
>> >> ________________________________
>> >> _______________________________________________
>> >> pgbr-geral mailing list
>> >> [email protected]
>> >> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>> >>
>> >>
>> >> _______________________________________________
>> >> pgbr-geral mailing list
>> >> [email protected]
>> >> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>> >
>> >
>> >
>> > --
>> > Eduardo Almeida - Software Engineer
>> > [email protected] - 27 3021-2430 / 27 9839 3755
>> >
>> > WEB2 Solutions - Inovando, sempre!
>> >
>> > _______________________________________________
>> > pgbr-geral mailing list
>> > [email protected]
>> > https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>> >
>> Eu fiz algo parecido para o sistema de controle do nosso campeonato de
>> kart.
>> A melhor forma que encontrei foi usando uma storage procedure. Que pode
>> tanto devolver o resultado diretamente quanto alimentar uma tabela.
>>
>>
>> _______________________________________________
>> pgbr-geral mailing list
>> [email protected]
>> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>>
>
>
>
> --
> Mello Júnior
> 41.3252-3555
>
> _______________________________________________
> pgbr-geral mailing list
> [email protected]
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a