SELECT COM FUNCAO MAX

CLAUDIOLUCROCHA 07/07/2005 09:59:01
#92609
Estou fazendo um select para pegar o maior valor de preco com a funcao MAX(valor_preco). Link varios arquivos com join. Tudo funciona.
Estou querendo agora pegar uma data desse mesmo registro (data_compra) para ter a data da compra do maior preco, mais estou recebendo erro.

VOCE TENTOU EXECUTAR UMA CONSULTA QUE NAO INCLUI DATA_COMPRA ESPECIFICADA COMO PARTE DA FUNCAO AGREGADA.

Alguem pode me explicar melhor o motivo.
WEBER 07/07/2005 10:02:11
#92613
Talvez vc não esteja montando a sua SQL certo, talvez vc esteja digitando o nome do campo errado de uma olhada se é realmente DATA_COMPRA, se quiser me mande um email com o seu projeto eu do uma ajeitada para vc
CLAUDIOLUCROCHA 07/07/2005 10:17:32
#92620
WWEBER gostaria de te enviar mais ele é muito grande, com modulos, objetos de outros sistemas, acho que ficaria inviavel.

Mais o campo existe mesmo.

Esse erro normalmente da por qual motivo.
WEBER 07/07/2005 10:21:32
#92624
é pelo motivo q te falei qndo teoricamente vc esta pedindo para filtrar uma consulta atraves de um campo q não existe ou esta definido errado, mas se vc quiser me mande apenas as tabelas q vc usa neste processo...... zipa e me manda, explicando oq vc qr realmente
JEAN.JEDSON 07/07/2005 10:40:22
#92634
poste o select que vc montou
CLAUDIOLUCROCHA 07/07/2005 10:54:16
#92642
Enviei o select e banco para o wwender via email se puder dar uma olhada agradeco.
O select esta assim
rst.Open "Select max(preco) as maximo_preco, ordem_compra.data_oc From ordem_compra_itens, ordem_compra_preco, ordem_compra_fornecedor, ordem_compra,
"ordem_compra left join ordem_compra_preco on ordem_compra_preco.ano_oc = ordem_compra.ano_oc and " & _
"ordem_compra.cod_oc = ordem_compra_preco.cod_oc, " & _
"ordem_compra_preco left join ordem_compra_itens on ordem_compra_itens.ano_oc = ordem_compra_preco.ano_oc and " & _
"ordem_compra_itens.cod_oc = ordem_compra_preco.cod_oc and ordem_compra_itens.cod_material = ordem_compra_preco.cod_material, " & _
"ordem_compra_preco left join ordem_compra_fornecedor on ordem_compra_preco.ano_oc = ordem_compra_fornecedor.ano_oc and " & _
"ordem_compra_preco.cod_oc = ordem_compra_fornecedor.cod_oc and ordem_compra_preco.cod_fornecedor = ordem_compra_fornecedor.cod_fornecedor " & _
"Where ordem_compra_itens.cod_material = " & cod_material & " and ordem_compra_fornecedor.vencedor = 1 "

Tenho uma ordem de compra (ORDEM_COMPRA), ela tem varios itens de compra (ORDEM_COMPRA_ITENS). Sera feito uma cotacao de compra em que varios fornecedores participaram (ORDEM_COMPRA_FORNECEDOR) e que cada um tem seu preco de cada proditos a serem comprados (ORDEM_COMPRA_PRECO). Ou seja Uma compra vai ter varios itens que serao comprados, serao orcados em varios fornecedores e cada fornecedor vai dar um precos dos itens a serem comprados.

Preciso do maior preco (ordem_compra_preco.preco) e da data da Ordem de compra (ordem_compra.data_oc) deste maior preco. Os dois estao em tabelas diferentes.

USUARIO.EXCLUIDOS 07/07/2005 11:29:46
#92669
Resposta escolhida
Tenta assim

"Where ordem_compra_itens.cod_material = " & cod_material & " and ordem_compra_fornecedor.vencedor = 1 group by ordem_compra.data_oc
order by max(preco) .se der certto Assim ele vai te agrupar por data_oc o maior preco
CLAUDIOLUCROCHA 07/07/2005 12:02:39
#92683
Laerte

Acho que assim deve funcionar mais ele vai gerar uma lista enorme e so preciso do maior. Acho que ficaria muito lento. Estou tentando algo assim

" Select max(preco) as maximo_preco, " & _
" (select ordem_compra.data_oc from ordem_compra where ordem_compra_preco.ano_oc = ordem_compra.ano_oc and ordem_compra.cod_oc = ordem_compra_preco.cod_oc) as data_ordem_compra ", _
" ordem_compra_itens, ordem_compra_preco, ordem_compra_fornecedor, " & _
" ordem_compra_preco left join ordem_compra_itens on ordem_compra_itens.ano_oc = ordem_compra_preco.ano_oc and " & _
" ordem_compra_itens.cod_oc = ordem_compra_preco.cod_oc and ordem_compra_itens.cod_material = ordem_compra_preco.cod_material, " & _
" ordem_compra_preco left join ordem_compra_fornecedor on ordem_compra_preco.ano_oc = ordem_compra_fornecedor.ano_oc and " & _
" ordem_compra_preco.cod_oc = ordem_compra_fornecedor.cod_oc and ordem_compra_preco.cod_fornecedor = ordem_compra_fornecedor.cod_fornecedor ", _
" Where ordem_compra_itens.cod_material = " & cod_material & " and ordem_compra_fornecedor.vencedor = 1 "

Pois ele me pegaria a data da oc do maior preco. O preco esta saindo certo mais a data ainda nao se algem poder ajudar. Ainda estou quebrando a cabeca
[S51]
USUARIO.EXCLUIDOS 07/07/2005 12:37:12
#92688
Dá um select top 1 ...ele já está ordenado pelo max e agrupado por data
CLAUDIOLUCROCHA 07/07/2005 12:58:46
#92697
Laerte,

Funcionou, Mais o select vai gerar 5000 registro para eu pegar so o primeiro, isso nao fica lento, estava tentando pegar so um registro para agilizar o select. O que voce acha ???
USUARIO.EXCLUIDOS 07/07/2005 18:25:13
#92792
Pior que sim véio....justamente pelo group by ele não vai saber qual linha retornar até eles estarem agrupados..se fosse só pelo order by, o engine consegue trabalhar com bookmarkÂÂÂ's.
Já que sua consulta pode trazer muitos dados mesmo Seria interessnate mesmo mudar a querie
Página 1 de 2 [12 registro(s)]
Tópico encerrado , respostas não são mais permitidas