Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

victorpavia

[Resolvido] Subquery + função MAX

Recommended Posts

Pessoal,

 

Não possuo experiência com SQL. Portanto tentarei explicar minha necessidade da melhor forma:

 

Possuo uma tabela de produtos (TPRD) com os campos: CODIGOREDUZIDO, DESCRICAO, PRECO

Outra tabela (TLOTEPRD)contendo um histórico com últimas entradas (DATAENTRADA)e data de validade(DATAVALIDADE)

dos produtos.

 

Nesta consulta retorno informações do produto (tabela TPRD)e sua última entrada(DATAENTRADA) na tabela TLOTEPRD:

 

select tp.idprd, codigoreduzido, nomefantasia, dtentrada 
from tprd tp inner join (select idprd, max(dataentrada) as dtentrada 
                        from tloteprd group by idprd) t1
                  on (t1.idprd = tp.idprd)

 

Preciso mostrar mais um campo chamado DATAVALIDADE que esta na tabela TLOTEPRD de onde busquei o campo DATAENTRADA.

 

Se possível, gostaria de alguma idéia.

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites
select tp.idprd, codigoreduzido, nomefantasia, dtentrada , DATAVALIDADE 
from tprd tp inner join (select idprd, DATAVALIDADE  , max(dataentrada) as dtentrada 
                        from tloteprd group by idprd) t1
                        on (t1.idprd = tp.idprd)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Motta,

No caso você inseriu o campo datavalidade na subquery que esta agrupada, portanto o erro:

Column 'tloteprd.DATAVALIDADE' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

 

Detalhando melhor minha dúvida:

 

Na tabela de produtos(TPRD) preciso das informações básicas (CODIGOREDUZIDO, DESCRICAO, PRECO). A tabela TLOTEPRD possui

um histórico de lotes cadastrados para os respectivos produtos. Dessa tabela (TLOTEPRD) preciso apenas da última entrada (DATAENTRADA) e sua respectiva data de validade (DATAVALIDADE).

 

Estrutura das tabelas:

 

TPRD TLOTEPRD

Idprd Idprd

Codigoreduzido Lote

Nomefantasia Dataentrada

Preco datavalidade

 

select idprd,codigoreduzido, descricao, preco1 from tprd where idprd = 3514

 

idprd codigoreduzido nomefantasia preco1

3514 003515 Achocolatado Nescau 2.0 400 gr 4.2000

 

select top 5 idprd, dataentrada, datavalidade from tloteprd where idprd = 3514

 

3514 2008-05-16 00:00:00.000 2009-04-01 00:00:00.000

3514 NULL NULL

3514 2008-07-22 00:00:00.000 2009-05-01 00:00:00.000

3514 2008-07-22 00:00:00.000 2009-05-01 00:00:00.000

3514 2008-08-21 00:00:00.000 2009-04-01 00:00:00.000

 

 

Ou seja tenho N entradas de cada produto na tabela TLOTEPRD, porém preciso apenas da última entrada + a data de validade e juntar essas informações com os campos da tabela de produtos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não atentei para o agrupamento.

 

select tp.idprd, codigoreduzido, nomefantasia, dtentrada , DATAVALIDADE 
from tprd tp inner join (select idprd, MAX(DATAVALIDADE) AS DATAVALIDADE  , max(dataentrada) as dtentrada 
                        from tloteprd group by idprd) t1
                        on (t1.idprd = tp.idprd)

 

 

Pega as maiores datas (podem estar em registros diferentes) de cada id.

 

É isto ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.