Fórum Ajuda com Select com max #460425
07/11/2013
0
veja o cenário
Tenho uma tabela de Produto, Nota e Itens
preciso retornar todos os produtos com data e quantidade da ultima compra .
na tabela itens tenho a quantidade de produtos comprado
na tabela nota a data da compra e em produtos o código descrição...
o Relatório teria que ficar desta forma:
Data compra Código produto quantidade comprada
20/10/2013 01 - PRODUTO A - 10
15/10/2013 02 - PRODUTO B - 05
10/10/2013 03 - PRODUTO C - 09
08/10/2013 05- PRODUTO D - 11
...
com este select eu consigo trazer a data da ultima compra mas fica faltando a quantidade
se colocar quantidade o select perde o efeito
select max(nf.dataemissao)data_Ultimacompra, it.codproduto, pd.descprod from produto PD
inner join itennfc it on it.codproduto = pd.codproduto
inner join nf_entrada nf on nf.cd_saida = it.cd_saida
group by it.codproduto, pd.descprod
se alguem puder ajudar agradeço
:
Hugo Silva
Curtir tópico
+ 0Posts
07/11/2013
Alex Lekao
Vc colocou por exemplo it.qtdade e nao deu certo?
vc possivelmente tera que colocar o it.qtdade tbm no group by.
agora so mais uma duvida, se vc quiser que naquela data se aconteceu mais de uma venda do produto, ele some todas as quantidades do dia, experimente colocar sum(it.qtdade) por exemplo, e veja se funciona.
Espero ter ajudado.
Abraco.
Alex - Lekao
Gostei + 0
07/11/2013
Hugo Silva
é quero somente a ultima compra de cada produto
Tentei colocar sum(it.quantidade) mas neste caso esta somando todas as compras...
agradeço pela dica mas não deu
Gostei + 0
07/11/2013
Thiago Irrazabal
SELECT FIRST(1)
Ficando assim:
select FIRST(1) nf.dataemissao as data_Ultimacompra, it.codproduto, pd.descprod from produto PD inner join itennfc it on it.codproduto = pd.codproduto inner join nf_entrada nf on nf.cd_saida = it.cd_saida group by it.codproduto, pd.descprod
Att,
Thiago Irrazabal de Oliveira.
Gostei + 0
07/11/2013
Hugo Silva
Se Trocar o select Max por First 1 ele vai trazer somente a ultima compra é o que preciso é a ultima compra de cada produto
desta forma:
Data compra Código produto quantidade comprada
20/10/2013 01 - PRODUTO A - 10
15/10/2013 02 - PRODUTO B - 05
10/10/2013 03 - PRODUTO C - 09
08/10/2013 05- PRODUTO D - 11
...
mas obrigado pela ajuda !
Gostei + 0
07/11/2013
Alex Lekao
nao sei se funciona, so passou pela minha cabeca. rsrsr
Gostei + 0
07/11/2013
Hugo Silva
Gostei + 0
07/11/2013
Hugo Silva
só não consegui juntar eles em um só
select max(nf.dataemissao)data_Ultimacompra,it.codproduto,pd.descprod,pd.estoque ,pd.estmin,est.estoque est_mult, cl.nome forn_padrao
from produto PD
inner join itennfc it on it.codproduto = pd.codproduto
inner join nf_entrada nf on nf.cd_saida = it.cd_saida
inner join estoque est on est.codproduto = pd.codproduto and est.codempresa =:codempresa
inner join cliente frn on frn.codcliente = nf.codfornecedor
left join cliente cl on cl.codcliente = pd.codfornecedor
group by it.codproduto, pd.descprod, pd.estoque,pd.estmin,est.estoque, cl.nome
select first 1 nf.cd_saida, it.quantidade, forn.nome
from itennfc it
inner join nf_entrada nf on nf.cd_saida = it.cd_saida
inner join cliente forn on forn.codcliente = nf.codfornecedor
where nf.dataemissao =:dataemissao and it.codproduto=:codproduto and nf.codempresa=:codempresa
order by nf.cd_saida desc
se alguem solber alguma dica agradeço
Gostei + 0
07/11/2013
Alex Lekao
dependendo vc podera usar um subselect.
a informacao que estao faltando vc coloca como subselect e no where do subselect relaciona com um campo unico que seja igual nos dois.
teste e veja se funciona.
Gostei + 0
07/11/2013
Hugo Silva
pelo jeito vou ter que usar os select separados mesmo
...
mas obrigado pela ajuda !
Gostei + 0
07/11/2013
Alex Lekao
o ruim eh que nao mexe com Firebird faz um tempo e entao nao tenho certeza como talvez funciona algumas coisas, no SQL Server normalmente faco os subselects e funcionam balinha.
ja ja eu posto algo aqui para vc testar.
Gostei + 0
07/11/2013
Alex Lekao
select
max(nf.dataemissao)data_Ultimacompra,
it.codproduto,
pd.descprod,
pd.estoque ,
pd.estmin,
est.estoque est_mult,
(select
sum(it.quantidade)
from itennfc it
where it.codproduto = pd.codproduto
and it.numnf = nf.numnf
) qtd_cmp,
cl.nome forn_padrao
from produto PD
inner join itennfc it on it.codproduto = pd.codproduto
inner join nf_entrada nf on nf.cd_saida = it.cd_saida
inner join estoque est on est.codproduto = pd.codproduto and est.codempresa =:codempresa
inner join cliente frn on frn.codcliente = nf.codfornecedor
left join cliente cl on cl.codcliente = pd.codfornecedor
group by it.codproduto, pd.descprod, pd.estoque,pd.estmin,est.estoque, cl.nome
como nao tenho estrutura nem base aqui fica mais dificil para eu pazer.
esse numnf eh especulacao pq nao sei qual eh o campo que poderia utilizar.
Gostei + 0
08/11/2013
Hugo Silva
Já tinha tentando algo do tipo, mas o FireBird acusa este erro
:
Invalid expression in the select list (not contained in either an
aggregate function or the GROUP BY clause)
Então achei que o erro estaria em meu código ,
Mas vendo o que me passou de exemplo vejo que problema esta no FireBird
no seu caso faltou colocar ao subquery no group by
e eu fiz isto para ver se roda e até o momento nada !
Obrigado pela ajuda !
Gostei + 0
08/11/2013
Alex Lekao
imaginei que talvez faltasse alguma coisa...
para eu fazer testes mais consistentes com relacao ao seu codigo para tentar te ajudar fica mais dificil sem as estruturas e algum conteudo mas tudo bem.
vc colocou o group by no codigo dentro do subselect e no where colocou alguma relacao com o select principla, certo?
Gostei + 0
08/11/2013
Hugo Silva
olha o código como esta :
select
max(nf.dataemissao)data_Ultimacompra,
it.codproduto,
pd.descprod,
pd.estoque ,
pd.estmin,
est.estoque est_mult,
(select
sum(it.quantidade)
from itennfc it
where it.codproduto = pd.codproduto
and it.cd_saida = nf.cd_saida
) as qtd_cmp,
cl.nome forn_padrao
from produto PD
inner join itennfc it on it.codproduto = pd.codproduto
inner join nf_entrada nf on nf.cd_saida = it.cd_saida
inner join estoque est on est.codproduto = pd.codproduto and est.codempresa =:codempresa
inner join cliente frn on frn.codcliente = nf.codfornecedor
left join cliente cl on cl.codcliente = pd.codfornecedor
where nf.dataemissao between :datain and :datafin
group by it.codproduto, pd.descprod, pd.estoque,pd.estmin,est.estoque, cl.nome,
(select sum(it.quantidade) from itennfc it where it.codproduto = pd.codproduto and it.cd_saida = nf.cd_saida )
Não consegui encontrar o erro
Gostei + 0
08/11/2013
Thiago Irrazabal
select
max(nf.dataemissao)data_Ultimacompra,
it.codproduto,
pd.descprod,
pd.estoque ,
pd.estmin,
est.estoque est_mult,
(select
sum(it.quantidade)
from itennfc it
where it.codproduto = pd.codproduto
and it.cd_saida = nf.cd_saida
) as qtd_cmp,
cl.nome forn_padrao
from produto PD
inner join itennfc it on it.codproduto = pd.codproduto
inner join nf_entrada nf on nf.cd_saida = it.cd_saida
inner join estoque est on est.codproduto = pd.codproduto and est.codempresa =:codempresa
inner join cliente frn on frn.codcliente = nf.codfornecedor
left join cliente cl on cl.codcliente = pd.codfornecedor
where nf.dataemissao between :datain and :datafin
group by it.codproduto, pd.descprod, pd.estoque,pd.estmin,est.estoque, cl.nome,
qtd_cmp
Att,
Thiago Irrazabal de Oliveira.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)