Ir para conteúdo

Arquivado

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

elizacoelho

[Resolvido] Trabalhando com Max e subconsultas

Recommended Posts

Bom dia gente,

Estou com o seguinte problema, tenho a sp abaixo que está retornando todos os registros cadastrados, mas na verdade preciso que me retorne apenas o último registro de uma entrada do produto com seus respectivos dados tais como nome, quantidade, data de última entrada e unidade. Acredito precisar utilizar uma subconsulta e o having mas não estou sabendo fazer isto muito bem alguém poderia me dar uma luz?

Obrigada

Segue minha SP

 

SELECT MAX(DISTINCT ENM.dt_entrada) AS 'ultima entrada', --seleciono a última entrada

UND.sigla, -- sigla da unidade

GPM.nm_grupo, -- grupo ao qual o produto pertence

PM.id_prod_malharia, -- loja que pertence o produto (PK da tabela)

PM.nm_produto, -- nome do produto

EIM.vlr_total_item, -- valor do produto

EIM.qtd_item -- quant. do produto

 

-- Aqui o usuário seleciona um ou mais produtos para exibir suas entradas

FROM Entradas_NF_Malharia ENM

INNER JOIN Unidades UND (NOLOCK)

ON UND.id_unidade = ENM.id_unidade

INNER JOIN Entradas_NF_Itens_Malharia EIM (NOLOCK)

ON ENM.id_entrada_malharia = EIM.id_entrada_malharia

INNER JOIN Produtos_Malharia PM (NOLOCK)

ON EIM.id_prod_malharia = PM.id_prod_malharia

INNER JOIN @Grupos_Produtos GP --tabela temporária para receber os produtos selecionados

ON GP.id_prod_malharia = PM.id_prod_malharia

INNER JOIN Grupos_Produtos_Malharia GPM (NOLOCK)

ON GPM.id_grp_malharia = PM.id_grp_malharia

WHERE (UND.sigla <> 'CA') AND (UND.sigla <> 'CE')--descarta estas unidades

GROUP BY UND.sigla,GPM.nm_grupo, PM.nm_produto, PM.id_prod_malharia, EIM.vlr_total_item, EIM.qtd_item

HAVING MAX(DISTINCT ENM.dt_entrada)<> 0

ORDER BY UND.sigla, PM.nm_produto

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia,

 

Pois é Alexandre esta dica não resolve, mas para aqueles que estão com o mesmo problema segue aí uma posssível solução.

Pois isto resolveu o meu, é o uso de uma subconsulta.

Obrigada pela dica.

 

SELECT UND.sigla, --sigla da unidade

PM.id_prod_malharia, --ID do produto

ENM.dt_entrada as dt_entrada,--data de entrada do produto

GPM.nm_Grupo, --grupo q o produto pertence

dbo.CompletaZerosEsq(PM.id_prod_malharia,4) +' '+ --ID do produto

left(PM.nm_produto,25) As nm_produto, --nome do produto

EIM.vlr_total_item, --valor do produto total

EIM.vlr_unitario, --valor do produto unitário

EIM.qtd_item --quantidade do produto

 

FROM Entradas_NF_Malharia ENM (NOLOCK)

INNER JOIN Unidades UND (NOLOCK)

ON UND.id_unidade = ENM.id_unidade

INNER JOIN Entradas_NF_Itens_Malharia EIM (NOLOCK)

ON ENM.id_entrada_malharia = EIM.id_entrada_malharia

INNER JOIN Produtos_Malharia PM (NOLOCK)

ON EIM.id_prod_malharia = PM.id_prod_malharia

INNER JOIN @Grupos_Produtos GP -- tabela temporária para receber mais de um produto selecionado pelo usuário

ON GP.id_prod_malharia = PM.id_prod_malharia

INNER JOIN Grupos_Produtos_Malharia GPM (NOLOCK)

ON GPM.id_grp_malharia = PM.id_grp_malharia

-- subconsulta p/ verificar a última data em que o produto foi dada a entrada no sistema, ou seja, a mais atual e não todas

WHERE (UND.sigla <> 'CE' and UND.sigla <> 'CA')

and ENM.dt_inclusao = (select max(T1.dt_inclusao)

from Entradas_NF_Malharia T1 (NOLOCK)

JOIN Entradas_NF_Itens_Malharia T2 (NOLOCK)

ON T1.id_entrada_malharia = T2.id_entrada_malharia

WHERE id_prod_malharia = EIM.id_prod_malharia

AND id_unidade = UND.id_unidade)

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.