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 = "">                  and   d.historico = 'entrada'),0)
       -
       coalesce((select sum(e.valor)
                 from xx_teste_xx e
                 where e.produto = a.produto
                 and   e.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

Responder a