SQL - PEGAR ID MAIOR

USUARIO.EXCLUIDOS 19/04/2007 10:56:54
#212709
Cara, tipo, já falei mais ou menos no msn, mas tipo, sei que vai me xingar, pois sempre respondo gambias pra você, mas você não me deixa outra escolha, quem sabe se você não fazer essa filtragem pelo VB, mais ou menos assim:

Dim UltCod As Integer
UltCod = -1
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, MaxDeCodigo DESC "

rst.Open SQL
Do While Not rst.EOF
If UltCod <> rst("Codigo") Then
'Aqui você adiciona os dados no GRID
End If
UltCod = rst("Codigo")
rst.MoveNext
Loop


Explicando, você ordena de forma decrescente (maior para menor) a coluna MaxDeCodigo, sendo assim o com maior vai aparecer primeiro, cria uma variavel para guardar o ultimo código adicionado, sendo assim, se o último código for diferente do atual então adiciona o registro...

Sacou?
Talvez não seja a melhor forma, mas é acho que é a melhor que consiguimos até agora...

Já sabe, qualquer dúvida tamo por aí...abços
HUGOSSOUZA 20/04/2007 16:06:12
#213066
Cleverton,
ja conseguiu resolver?
qual o banco de dados vc ta usando?
tem como você postar algum script com a criação das tabelas e algumas informações?

USUARIO.EXCLUIDOS 23/06/2007 23:10:39
#222870
CLEVERTON,
Reveja a sua primeira mensagem desse post e note que você tem o mesmo código de produto cadastrado duas vezes e que os campos AVista e APrazo diferem, o resultado pode não ser o desejado mais é o correto uma vez que esse dois camnpos fazem parte do agrupamento e os registros são distintos.
Você precisa decidir qual registro obter quando os campos Avista e APrazo possuirem mais de um valor para o mesmo produto, uma vez que esse campos estão no agrupamenteo.
Utilize a função First, Last, Max ou Min num desses campos e retire-lo do agrupamento.


Ex:
SELECT Produtos.Codigo, Produtos.Nome AS [Nome do Produto], Produtos_Marca.Nome AS Marca, First(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.MLPrazo)/100)
ORDER BY Produtos.Nome;
CLEVERTON 10/07/2007 13:12:34
#225352
Mais Alguém ?
Página 3 de 5 [43 registro(s)]
Tópico encerrado , respostas não são mais permitidas