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