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 …