SQL - PEGAR ID MAIOR

CLEVERTON 17/04/2007 09:38:17
#212225
Olá Pessoal, eu queria pegar somente o Registro que o Produtos_EntradaDET.Codigo seja o maior.

segue a SQL

  

SELECT Produtos.Codigo, Produtos.Nome AS [Nome do Produto], Produtos_Marca.Nome AS Marca, IIf(IsNull(Produtos_EntradaDET.ValorUnit),0,Produtos_EntradaDET.ValorUnit)+((IIf(IsNull(Produtos_EntradaDET.ValorUnit),0,Produtos_EntradaDET.ValorUnit)*Produtos.MLAvista)/100) AS Avista, IIf(IsNull(Produtos_EntradaDET.ValorUnit),0,Produtos_EntradaDET.ValorUnit)+((IIf(IsNull(Produtos_EntradaDET.ValorUnit),0,Produtos_EntradaDET.ValorUnit)*Produtos.MLPrazo)/100) AS [A Prazo], Max(Produtos_EntradaDET.Codigo) AS MaxDeCodigo
FROM Produtos_EntradaDET RIGHT JOIN (Produtos LEFT JOIN Produtos_Marca ON Produtos.CodigoMarca = Produtos_Marca.Codigo) ON Produtos_EntradaDET.CodigoProduto = Produtos.Codigo
GROUP BY Produtos.Codigo, Produtos.Nome, Produtos_Marca.Nome, IIf(IsNull(Produtos_EntradaDET.ValorUnit),0,Produtos_EntradaDET.ValorUnit)+((IIf(IsNull(Produtos_EntradaDET.ValorUnit),0,Produtos_EntradaDET.ValorUnit)*Produtos.MLAvista)/100), IIf(IsNull(Produtos_EntradaDET.ValorUnit),0,Produtos_EntradaDET.ValorUnit)+((IIf(IsNull(Produtos_EntradaDET.ValorUnit),0,Produtos_EntradaDET.ValorUnit)*Produtos.MLPrazo)/100)
ORDER BY Produtos.Nome;



Só que está aparecendo dois registros com o mesmo Produtos.Codigo.


FFCOUTO 17/04/2007 09:47:58
#212228
Não sei irá funcionar, mas tente por um DISTINCTROW após o SELECT.
LIONHEART 17/04/2007 10:16:32
#212239
Copia e cola e ve se vai:

Citação:

select * from
( SELECT Produtos.Codigo,
Produtos.Nome AS [Nome do Produto],
Produtos_Marca.Nome AS Marca, IIf(IsNull(Produtos_EntradaDET.ValorUnit),0,Produtos_EntradaDET.ValorUnit)+((IIf(IsNull(Produtos_EntradaDET.ValorUnit),0,Produtos_EntradaDET.ValorUnit)*Produtos.MLAvista)/100) AS Avista, IIf(IsNull(Produtos_EntradaDET.ValorUnit),0,Produtos_EntradaDET.ValorUnit)+((IIf(IsNull(Produtos_EntradaDET.ValorUnit),0,Produtos_EntradaDET.ValorUnit)*Produtos.MLPrazo)/100) AS [A Prazo],
Max(Produtos_EntradaDET.Codigo) AS MaxDeCodigo
FROM Produtos_EntradaDET RIGHT JOIN (Produtos LEFT JOIN Produtos_Marca ON Produtos.CodigoMarca = Produtos_Marca.Codigo) ON Produtos_EntradaDET.CodigoProduto = Produtos.Codigo
GROUP BY Produtos.Codigo, Produtos.Nome, Produtos_Marca.Nome, IIf(IsNull(Produtos_EntradaDET.ValorUnit),0,Produtos_EntradaDET.ValorUnit)+((IIf(IsNull(Produtos_EntradaDET.ValorUnit),0,Produtos_EntradaDET.ValorUnit)*Produtos.MLAvista)/100), IIf(IsNull(Produtos_EntradaDET.ValorUnit),0,Produtos_EntradaDET.ValorUnit)+((IIf(IsNull(Produtos_EntradaDET.ValorUnit),0,Produtos_EntradaDET.ValorUnit)*Produtos.MLPrazo)/100) )
where Codigo = MaxDeCodigo
ORDER BY Produtos.Nome;


CLEVERTON 17/04/2007 10:47:52
#212244
FFCOUTO
Retornou o Mesmo Resultado

LIONHEART
Não veio nenhum registro
LIONHEART 17/04/2007 11:52:17
#212255
Citação:

SELECT Produtos.Codigo, Produtos.Nome AS [Nome do Produto], Produtos_Marca.Nome AS Marca, IIf(IsNull(Produtos_EntradaDET.ValorUnit),0,Produtos_EntradaDET.ValorUnit)+((IIf(IsNull(Produtos_EntradaDET.ValorUnit),0,Produtos_EntradaDET.ValorUnit)*Produtos.MLAvista)/100) AS Avista, IIf(IsNull(Produtos_EntradaDET.ValorUnit),0,Produtos_EntradaDET.ValorUnit)+((IIf(IsNull(Produtos_EntradaDET.ValorUnit),0,Produtos_EntradaDET.ValorUnit)*Produtos.MLPrazo)/100) AS [A Prazo], Max(Produtos_EntradaDET.Codigo) AS MaxDeCodigo
FROM Produtos_EntradaDET RIGHT JOIN (Produtos LEFT JOIN Produtos_Marca ON Produtos.CodigoMarca = Produtos_Marca.Codigo) ON Produtos_EntradaDET.CodigoProduto = Produtos.Codigo
GROUP BY Produtos.Codigo, Produtos.Nome, Produtos_Marca.Nome, IIf(IsNull(Produtos_EntradaDET.ValorUnit),0,Produtos_EntradaDET.ValorUnit)+((IIf(IsNull(Produtos_EntradaDET.ValorUnit),0,Produtos_EntradaDET.ValorUnit)*Produtos.MLAvista)/100), IIf(IsNull(Produtos_EntradaDET.ValorUnit),0,Produtos_EntradaDET.ValorUnit)+((IIf(IsNull(Produtos_EntradaDET.ValorUnit),0,Produtos_EntradaDET.ValorUnit)*Produtos.MLPrazo)/100)
Having Produtos_EntradaDET.Codigo = Max(Produtos_EntradaDET.Codigo)
ORDER BY Produtos.Nome;




Cara, eu não lembro se o Having vem Antes ou depois do Group By, mas agora acho que resolve.
HUGOSSOUZA 17/04/2007 12:50:13
#212270
o problema esta no valor a vista e a prazo que são diferentes.
vc pode colocar um max nos dois campos e tirar ele do group by mas o problema é que ele pode pegar o valor a vista de uma linha e o valor a prazo de outro.
ex:

codigo avista aprazo
1 100 200
1 200 100

se vc der um max nos dois ele vai volta
1 200 200


faz um teste com esse select.

SELECT Produtos.Codigo, Produtos.Nome AS [Nome do Produto], Produtos_Marca.Nome AS Marca, max(IIf(IsNull(Produtos_EntradaDET.ValorUnit),0,Produtos_EntradaDET.ValorUnit)+((IIf(IsNull(Produtos_EntradaDET.ValorUnit),0,Produtos_EntradaDET.ValorUnit)*Produtos.MLAvista)/100) ) AS Avista, max(IIf(IsNull(Produtos_EntradaDET.ValorUnit),0,Produtos_EntradaDET.ValorUnit)+((IIf(IsNull(Produtos_EntradaDET.ValorUnit),0,Produtos_EntradaDET.ValorUnit)*Produtos.MLPrazo)/100)) AS [A Prazo], Max(Produtos_EntradaDET.Codigo) AS MaxDeCodigo
FROM Produtos_EntradaDET RIGHT JOIN (Produtos LEFT JOIN Produtos_Marca ON Produtos.CodigoMarca = Produtos_Marca.Codigo) ON Produtos_EntradaDET.CodigoProduto = Produtos.Codigo
GROUP BY Produtos.Codigo, Produtos.Nome, Produtos_Marca.Nome
ORDER BY Produtos.Nome;
CLEVERTON 17/04/2007 14:11:34
#212290
HUGOSSOUZA
mas o problema é que não é para pegar o maior valor unitario.

Eu queria pegar o valor da Ultimo Entrada pelo campo Produtos_Entrada.Codigo (AutoNumeração)

Dá pra fazer uma gambia, só que perde o tempo de carregamento vai aumentar de 02 segundos pra 02 minutos
CLEVERTON 17/04/2007 14:18:04
#212293
LIONHEART

não deu certo, a função agregada só vai trazer os registros encontrados na tabela produtos_det.codigo
HUGOSSOUZA 17/04/2007 14:26:19
#212299
mas vc tem 2 códigos iguais... como vai saber qual o maior?
vc tem algum campo data hora?
e se vc usar duas subconsultas? uma para o valor a prazo e outra para o valor a vista.
nessa subconsulta da um limit 1 e ordena pela data ou hora


CLEVERTON 17/04/2007 15:01:49
#212315
Segue a Estrutura das Tabelas
HUGOSSOUZA 17/04/2007 15:26:04
#212339
não da para fazer dois selects?

eu viajei nessa sua soma.
pq vc da um isnull somando 2 x a mesma coluna da mesma tabela?

ve se vc consegue entender minha ideia:
faz uma subconsulta caculando o valor a vista só do código que vc quer e manda ordernar de forma decrescente o campo codigo.
só q ai vc da um top 1 ou um limit 1 para voltar só o maior.
deu pra entender?

acho que viajei agora... [S83]

acho que vai ficar um pouco lenta e um pouco feia a consulta tbm.
tenta assim:

SELECT Produtos.Codigo, Produtos.Nome AS [Nome do Produto], Produtos_Marca.Nome AS Marca,

(select top 1
IIf(IsNull(ValorUnit),0,ValorUnit)+((IIf(IsNull(ValorUnit),0,ValorUnit)* Produtos.MLAvista)/100)
from Produtos_EntradaDET where codigo = Produtos_EntradaDET.codigo order by codigo desc) as avista,

(select top 1
IIf(IsNull(ValorUnit),0,ValorUnit)+((IIf(IsNull(ValorUnit),0,ValorUnit)* Produtos.MLPrazo)/100)
from Produtos_EntradaDET where codigo = Produtos_EntradaDET.codigo order by codigo desc) AS APrazo,

Max(Produtos_EntradaDET.Codigo) AS MaxDeCodigo

FROM Produtos_EntradaDET RIGHT JOIN (Produtos LEFT JOIN Produtos_Marca ON Produtos.CodigoMarca = Produtos_Marca.Codigo) ON Produtos_EntradaDET.CodigoProduto = Produtos.Codigo

GROUP BY Produtos.Codigo, Produtos.Nome, Produtos_Marca.Nome

ORDER BY Produtos.Nome;
Página 1 de 5 [43 registro(s)]
Tópico encerrado , respostas não são mais permitidas