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