Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

mauriforte

consulta em data fixa

Recommended Posts

Tenho uma tabela onde estão registradas as seguintes transações:

 

Data ----------- Ativo -- Hist ---- quantidade ---- saldo

02/01/2010 -- petr4 -- compra --- 200 ----------- 200

05/01/2010 -- vale5 -- compra --- 250 ----------- 250

20/02/2010 -- petr4 -- venda ------ 50 ------------ 150

03/03/2010 -- usim5 -- compra -- 100 ----------- 100

18/03/2010 -- vale5 -- venda ------ 50 ----------- 200

22/03/2010 -- petr4 -- venda ----- 150 ----------- 0

05/04/2010 -- petr4 -- compra ---- 250 ---------- 250

 

Como montar uma consulta de forma a obter os saldos finais (estoque) de cada ativo no dia 31/03/2010 (data essa que não está registrada na tabela) ?

Notar que a lista resultante não poderá registrar/mostrar petr4 (saldo zero). Grato pela ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado,Motta, pela atenção.

Por favor, se possível, indique-me o que há de errado nesta query:

 

SELECT *, SUM(qsaldo) as soma FROM carteira where data <=''' +datasql+''' group by ativo order by titular, ativo

 

Ela não está somando o campo qsaldo, limitando-se a apresentar apenas o primeiro qsaldo de cada ativo.

Os demais quesitos estão corretos, ou seja, seleciona as datas conforme determinado por 'datasql' e ordena os resultados por titular e ativo.

Estou usando o Delphi. Por isso a expressão ''' +datasql+'''

Compartilhar este post


Link para o post
Compartilhar em outros sites

SELECT titular,ativo , SUM(qsaldo) as soma

FROM carteira

where data <=''' +datasql+'''

group by titular, ativo

order by titular, ativo

 

 

 

Para usar group by nao se pode usar *

Para ordenar com group precisa definar a coluna

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agradeço, mais uma vez, sua atenção, Motta.

Entretanto,vi-me obrigado a citar nominalmente todos os campos da tabela porque o aplicativo acusa erro na query.

Ficou assim:

 

SELECT id,titular,data, ativo, nota, precomedio, qsaldo, SUM(qsaldo) as soma FROM carteira where data <=''' +datasql+''' group by titular, ativo order by titular, ativo

 

Mas continua não somando o qsaldo, limitando-se a apresentar apenas o primeiro qsaldo de cada ativo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faz por este agrupamento :

 

id,titular,data, ativo, nota, precomedio, qsaldo

 

Sua dúvida original era, segundo entendi exibir datas que não constam da base de dados, por isto sugeri o artifício do UNION.

 

Talvez você tenha de recorrer a tratar a totalização de alguma forma ao nível da aplicação.

 

Qq coisa estamos aí.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Realmente, estou engasgado com essa query que não fornece os resultados necessitados.

Ela seleciona corretamente os dados anteriores à data que quero, mas não efetua a soma do qsaldo.

Fiz a alteração que você sugeriu ("Faz por este agrupamento : id,titular,data, ativo, nota, precomedio, qsaldo").

Acabou piorando a situação porque o resultado é uma listagem de todos lançamentos.

Penso que vou ter de programar - através de um loop - a totalização de cada ativo obtido pela query.

Acho muito estranho porque, pelos exemplos que vi, o SUM deveria dar os resultados esperados.

Fico muito grato por sua atenção.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A questão é que você quer um total de uma data que não consta da base.

 

Talvez seja mais fácil fazer por programação.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Motta,

Por mera curiosidade, fiz a mesma programação da query em PHP. Funcionou corretamente, totalizando na data requerida e agrupando por ativo.

Não entendi mais nada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.