Valeu Odizon, isso funcionou e me ajuda muito.
  ----- Original Message ----- 
  From: Odizon (Gmail) 
  To: Comunidade PostgreSQL Brasileira 
  Sent: Friday, February 08, 2008 2:08 AM
  Subject: Re: [pgbr-geral] Como fazer o sql


         Pessoal, existem várias forma de fazer, porém depende de como foi 
criada a sua tabela. Considerando que a sua tabela foi criado como 
exemplificou, onde tem duas colunas para informação de valores (uma para 
entrada e outra para saída) o comando é simples:
  ------------------------------------------------------
  select a.produto, a.data, 
        (coalesce((select sum(b.entrada - b.saida)
                   from xx_teste_xx b
                   where b.produto = a.produto
                   and   b.data < a.data),0) 
         +
         sum(a.entrada - a.saida)) as saldo
  from xx_teste_xx a
  group by a.produto, a.data
  order by a.produto, a.data
  ------------------------------------------------------

         Agora, caso você tenha criado sua tabela com apenas um campo para 
informar valor e seu histórico serve de identificador do registro (para dizer 
se o registro é de entrada ou de saída) a solução seria algo parecido com isso:
  ------------------------------------------------------
  select a.produto, a.data, 
       ((coalesce((select sum(b.valor)
                   from xx_teste_xx b
                   where b.produto = a.produto
                   and   b.data < a.data
                   and   b.historico = 'entrada'),0) 
         -
         coalesce((select sum(c.valor)
                   from xx_teste_xx c
                   where c.produto = a.produto
                   and   c.data < a.data
                   and   c.historico = 'saida'),0))
         +
        (coalesce((select sum(d.valor)
                   from xx_teste_xx d
                   where d.produto = a.produto
                   and   d.data = a.data
                   and   d.historico = 'entrada'),0) 
         -
         coalesce((select sum(e.valor)
                   from xx_teste_xx e
                   where e.produto = a.produto
                   and   e.data = a.data
                   and   e.historico = 'saida'),0))) as saldo
  from xx_teste_xx a
  group by a.produto, a.data
  order by a.produto, a.data
  ------------------------------------------------------

         Espero ter ajudado.

         Obs.: normalmente só se ensina o que deve ser buscado, mas nesse caso 
como estava sem sono resolvi escrever duas soluções (mesmo porque o 
entendimento dessas soluções requer mais lógica do que alguns textos sobre 
group by)

         Abraços
         Odizon

  sergio escreveu: 

      Olá Pessoal.

      Mais uma de sql, se alguém puder me ajudar.

      Abaixo segue um exemplo de uma pequena base. Ela mostra a movimentação de 
um produto (suas entradas e saidas). Esse relatório é analitico, pois mostra 
todas as movimentações ocorridas em um dia. O que eu preciso é sintetizar esse 
relatorio, ou seja, montar um resultado que me mostre somente o produto, a data 
e o saldo do final do dia.
      O saldo do final do dia é sempre o último saldo dentro de uma mesma data, 
ou seja, no caso do dia 22/01 o saldo é 22 e dia 03/03 é 16.
      Como eu montaria um sql que me desse esse resultado?


            Produto Data Historico Entrada Saida Saldo 
            AAAAA 
           Estoque 
           
           0 
            AAAAA 01/02/2008 Entrada 97 
           97 
            AAAAA 15/01/2008 Saida 
           100 -3 
            AAAAA 22/01/2008 Entrada 15 
           12 
            AAAAA 22/01/2008 Entrada 20 
           32 
            AAAAA 22/01/2008 Saida 
           10 22 
            AAAAA 20/02/2008 Saida 
           26 -4 
            AAAAA 03/03/2008 Entrada 12 
           8 
            AAAAA 03/03/2008 Entrada 8 
           16 




      Como deve ser o resultado do sql:

            Produto Data Saldo 
            AAAAA 
           0 
            AAAAA 01/02/2008 97 
            AAAAA 15/01/2008 -3 
            AAAAA 22/01/2008 22 
            AAAAA 20/02/2008 -4 
            AAAAA 03/03/2008 16 

----------------------------------------------------------------------------
_______________________________________________
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
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a