Array
(
    [0] => stdClass Object
        (
            [Votos_Balanceados] => 1
            [id] => 523810
            [titulo] => pegando o ultimo registro do produto na tabela de estoque
            [dataCadastro] => DateTime Object
                (
                    [date] => 2015-06-23 10:50:24
                    [timezone_type] => 3
                    [timezone] => America/Sao_Paulo
                )

            [isFirstPost] => -1
            [idUsuario] => 375952
            [status] => A
            [isExample] => 
            [NomeUsuario] => Cristiane
            [Apelido] => 
            [Foto] => 
            [Conteudo] => Consegui montar um sql aqui, demora um pouco ainda pra trazer os dados, mas penso q será muito melhor assim do q usar while toda vida
o sql e este:

[code]/select distinct prod.cod_produto, est.quat_no_estoq, PROD.nome_lista, PROD.unidade
from estoque est
inner join produto prod
on est.codproduto = prod.cod_produto
where est.codestoque = (select max(es.codestoque) from estoque es where prod.cod_produto = es.codproduto)
group by prod.cod_produto, est.quat_no_estoq, PROD.nome_lista, PROD.unidade
ORDER BY PROD.cod_produto[code]

Agradeço a vcs pela ajuda ) )

pegando o ultimo registro do produto na tabela de estoque

Cristiane
   - 19 jun 2015

tenho uma tabela de estoque q possui o código do produto e a quantidade atual do estoque pro mesmo.
Assim, vai haver vários registros do mesmo produto.
O q eu preciso é pegar o último registro de cada produto, já ordenado por código do estoque, coletando a quantidade atual do estoque.
Alguém tem alguma ideia de sql q eu possa usar?
no meu sql sai assim:
códigoProd quantEstoque
1 100
1 90
1 30
2 100
2 80
e queria q saísse assim:
codigoProd quantEstoque
1 30
2 80
o sql q estou usando é este:
#Código

SELECT es.codproduto, es.quat_no_estoq AS final
FROM estoque es
order BY es.codproduto, es.codestoque

Desde Já Agradeço.

Post mais votado

Cristiane
   - 23 jun 2015

Consegui montar um sql aqui, demora um pouco ainda pra trazer os dados, mas penso q será muito melhor assim do q usar while toda vida
o sql e este:

[tagcod]/select distinct prod.cod_produto, est.quat_no_estoq, PROD.nome_lista, PROD.unidade
from estoque est
inner join produto prod
on est.codproduto = prod.cod_produto
where est.codestoque = (select max(es.codestoque) from estoque es where prod.cod_produto = es.codproduto)
group by prod.cod_produto, est.quat_no_estoq, PROD.nome_lista, PROD.unidade
ORDER BY PROD.cod_produto[tagcod]

Agradeço a vcs pela ajuda

Dorivan Sousa
|
MVP
Pontos: 10
    19 jun 2015

#Código

SELECT es.codproduto, sum(es.quat_no_estoq) AS final
FROM estoque es
group BY es.codproduto
order BY es.codproduto, 2

Marisiana
   - 19 jun 2015

Cristiane, você precisa utilizar mais algum critério para filtrar os dados como, por exemplo, a data de atualização do estoque..
Apenas com o código do produto e a quantidade, como você representou, não tem como saber qual é estoque atual.

Marisiana
   - 19 jun 2015

Cristiane, você precisa utilizar mais algum critério para filtrar os dados como, por exemplo, a data de atualização do estoque..
Apenas com o código do produto e a quantidade, como você representou, não tem como saber qual é estoque atual.

Dorivan Sousa
|
MVP
Pontos: 10
    19 jun 2015

eu nao havia entendido bem a questao e apenas somei os estoque, concordo com a Marisiana q falta um criterio para que saiba quem é o ultimo estoque atual... nesse caso nao seria melhor voce utilizar um registro unico de estoque, e ficar atualizando o mesmo?
mas digamos que nessa estrutura vc ponha a data de estoque teria q fazer uma manobra pra conseguir o estoque.
#Código

SELECT 
   distinct es1.codproduto,
   (select es2.quat_no_estoq from estoque where es2.dt_es_atual = (select max(es3.dt_es_atual) from estoque es3 where es1.codproduto = es3.codproduto)
    where es2.codproduto = es1.codproduto)
FROM estoque es1


sera que funciona?

Marisiana
   - 22 jun 2015

Pode ser mais simples...
Considerando que na tabela de estoque exista um campo "data_atualização" para armazenar as datas de inserções dos registros, pode-se obter o último registro dessa forma:
#Código

select prod.idproduto,
       est.qtdestoque,
       MAX(est.data_atualizacao) as ultima_data
from estoque est
inner join produto prod
on est.idproduto = prod.idproduto
group by prod.idproduto,
       est.qtdestoque
order by prod.idproduto

Marisiana
   - 22 jun 2015

Pode ser mais simples...
Considerando que na tabela de estoque exista um campo "data_atualização" para armazenar as datas de inserções dos registros, pode-se obter o último registro dessa forma:
#Código

select prod.idproduto,
       est.qtdestoque,
       MAX(est.data_atualizacao) as ultima_data
from estoque est
inner join produto prod
on est.idproduto = prod.idproduto
group by prod.idproduto,
       est.qtdestoque
order by prod.idproduto

Dorivan Sousa
|
MVP
Pontos: 10
    22 jun 2015

e se houver a mesma data duas vezes? qual estoque vai pegar?

Marisiana
   - 22 jun 2015

Vai depender da estrutura e de como os dados estão sendo armazenados.
Mas não tem necessidade de armazenar mais de um registro diário da movimentação do estoque de um mesmo produto, você pode totalizar tudo em um registro só.

Marisiana
   - 22 jun 2015

Cristiane, você poderia postar a estrutura da tabela que você utiliza para extrair essas informações?

Cristiane
   - 23 jun 2015

cod_estoque,
data movimento,
hora movimento,
cod_produto
cod_empresa
cod_usuario
quantidade - movimentada
quant_est_final - quantidade de estoque atual após movimentação

Marisiana
   - 23 jun 2015

Se o que define o estoque atual é o maior codestoque, você pode fazer assim:
#Código

select prod.cod_produto, 
       est.quat_no_estoq,
       prod.nome_lista,
       prod.unidade,
       MAX(est.codestoque) as codestoque
from estoque est
inner join produto prod
on est.codproduto = prod.cod_produto
group by prod.cod_produto, 
         est.quat_no_estoq, 
         prod.nome_lista, 
         prod.unidade
ORDER BY prod.cod_produto


Isso vai melhorar o problema da demora...