Group By não recupera a ultima entrada

Olá galera estou com um problema como eu faço para que quando eu der o comando group by no sql ele traga para mim a ultima inserção pq pelo que percebi o group by trabalha assim: procura o dado quando acha, ele passa a agrupar todos os seguintes “dentro” do primeiro dado achado, procede o meu raciocínio? tem como fazer essa inversão? valew!

Que dados vc tem na sua tabela? E que resultado vc espera após rodar o SQL?

Group By agrupa valores, não pega o último valor.

Agora você pode usar a função de agregação MAX() caso você tenha um campo data ou um campo com id crescente, por exemplo.

SELECT MAX(id) FROM usuario
SELECT MAX(data_ins) FROM usuario
SELECT MAX(id) id, nome FROM usuario GROUP BY nome
SELECT MAX(data_ins) data_ins, nome FROM usuario GROUP BY nome

Coloque os atributos que não estão na função no GROUP BY separado por virgula

pois é ja tentei usar o Max mas ele retorna o valor e não a linha. oque acontece é o seguinte eu tenho um produto e esse produto pode ter várias entradas no estoque ou seja o produto “A” no dia 04/01/2010 pode ter o valor 15,00 e no dia 05/01/2009 esse valor pode ser modificado para 50,00 só que como eu preciso usar o group By (eu faço também a soma das entradas e saidas) ele só pega o valor de 15,00 por ser a primeira “aparição” do dado solicitado

Você quer o ultimo valor do produto ou a linha inteira?

Ou melhor. Que dados você tem e que dados você quer recuperar?

pode ser o ultimo valor do produto, eu faço o comando assim

select p.cod_produto,p.cod_barras,p.descricao, sum(pe.entrada) as ent, sum(pe.saida)as saida,pe.valor_venda
from produto p,produto_estoque pe
where pe.cod_loja = 1
and pe.cod_produto = p.cod_produto and cod_barras= 123
group by p.cod_produto

os campos que eu quero ja estão explicitados na consulta, esses vem tranquilo o único porem é quanto ao valor pq, a descriçao, o código e o código de barras é a mesma independente de entrada, a soma de entrada e saida não interessa quem entrou ou saiu ele vai contabilizar, quanto a isso sem problema aí vem pra onde ta pegando que o valor que ele tem que me trazer é o ultimo cadastrado, mas na consulta que eu fiz ele tras o primeiro cadastrado

Aqui você informou que queria o último registro no seu primeiro post

mas segui o seu exemplo do último post e coloquei subselect, você quer os dados, e a soma de entrada e saída

select
      p.cod_produto,
      p.cod_barras,
      p.descricao,
      (select
             sum(produto_estoque.entrada)
       from produto_estoque
       where produto_estoque.cod_loja = 1 and produto_estoque.cod_produto = p.cod_produto) as ent,
       (select
              sum(produto_estoque.saida)
       from produto_estoque
       where produto_estoque.cod_loja = 1 and produto_estoque.cod_produto = p.cod_produto) as saida,
       pe.valor_venda  
from produto p, produto_estoque pe  
where pe.cod_loja = 1  
and pe.cod_produto = p.cod_produto and cod_barras= 123

Caso você precise da última data de entrada/saída coloque algo como:

and dt = (select MAX(sua_tabela_data.dt) from sua_tabela_data)

Não testei, mas acho que é isso que você quer

Você vai ter que fazer isso usando subselect. na verdade dois subselect.

Primeiro pega a maior data, depois com ela você pega o valor.

Seria mais o menos assim.

select colunas, (select valor from tabela data = (select max(data) from tabela)) as valor
from …