|
Postada em 26/06/2006 11:54 hs
Por favor, tenho a seguinte dúvida. como construir uma instrução SQL que me retorne o último registro da tabela filho. Ex: Produtos : ProdutoID Descricao 1 Cerveja Antarctica 2 Cerveja Skol 3 Cerveja Skol Bock Estoque: EstoqueID ProdutoID DataMovimentacao Entradas Saidas Saldo 1 1 01/01/2006 100 0 100 2 1 01/01/2006 0 5 95 3 1 02/01/2006 0 5 90 Gostaria de selecionar todos os produtos e mostrar só o saldo atual de cada um. Grato pela atenção.
|
|
|
|
|
Postada em 26/06/2006 15:39 hs
Bom, seria mais facil se tivesse colocado um campo estoque na tabela de produtos e a cada movimentação ir atualizando, teria o estoque sempre atualizado trabalhando em apenas uma tabela. Tente ver se funciona assim: "select EstoqueID Max(dataMovimentação) from Estoque where ProdutoID='" & Text1.Text & "'" vlu//
|
|
|
|
Postada em 27/06/2006 08:41 hs
-- Produtos : ProdutoID Descricao -- 1 Cerveja Antarctica -- 2 Cerveja Skol -- 3 Cerveja Skol Bock -- -- Estoque: EstoqueID ProdutoID DataMovimentacao Entradas Saidas Saldo -- 1 1 01/01/2006 100 0 100 -- 2 1 01/01/2006 0 5 95 -- 3 1 02/01/2006 0 5 90 create table #Produtos ( ProdutoID Integer, Descricao Varchar(20) )
create table #Estoque ( EstoqueID integer, ProdutoID integer, DataMovimentacao datetime, Entradas integer, Saidas integer, Saldo integer )
set nocount on insert into #Produtos (ProdutoID, Descricao) values (1, 'Cerveja Antarctica') insert into #Produtos (ProdutoID, Descricao) values (2, 'Cerveja Skol') insert into #Produtos (ProdutoID, Descricao) values (3, 'Cerveja Skol Bock') insert into #Estoque (EstoqueID, ProdutoID, DataMovimentacao, Entradas, Saidas, Saldo) values (1, 1, '01/01/2006',100,0,100) insert into #Estoque (EstoqueID, ProdutoID, DataMovimentacao, Entradas, Saidas, Saldo) values (2, 1, '01/01/2006',0,5,95) insert into #Estoque (EstoqueID, ProdutoID, DataMovimentacao, Entradas, Saidas, Saldo) values (3, 1, '02/01/2006',0,5,90) select #Estoque.ProdutoID, a.DataMovimentacao, #Estoque.Saldo from #Estoque inner join ( select ProdutoID, max(DataMovimentacao) DataMovimentacao from #Estoque group by ProdutoID )a on a.ProdutoID = #Estoque.ProdutoID and a.DataMovimentacao = #Estoque.DataMovimentacao inner join #Produtos on #Produtos.ProdutoID = #Estoque.ProdutoID
drop table #Produtos drop table #Estoque
|
|
|
|
Postada em 27/06/2006 14:06 hs
LCRamos, Obrigado por responder, mas desta maneira eu perco os históricos da movimentação. Martini, Obrigado por respoder, vou tentar desta forma, Grato pela atenção.
|
|
|
|
Postada em 27/06/2006 14:46 hs
Edson, voce não perde o histórico da movimentação, pois ela continua na tabela, e isto faz ficar mais rápido, já pensou toda vez que o cliente quiser saber o estoque de um determinado produto voce tem que fazer esta sql, e se for para colocar o ID do produto, descrição, etc. e estoque junto, tudo em um grid, não fica mais fácil um campo atualizado no produto? vlu//
|
|
|
|
Postada em 27/06/2006 17:23 hs
Ok, LCRamos, vou testar, mas ainda acho meio esquisito. Grato pela atenção.
|
|
|
|