Fórum CommandText... problemas com instrução select max... #267759
08/02/2005
0
Estou tendo dificuldades em executar um select max quando passo para o CommandText de um ClientDataSet... Ao tentar executá-lo, o Delphi retorna ´Invalid Column Reference´. Segue a instrução para avaliação.
´select max (HISTORICOPRECOS.VALORCOTADO) as ´Valor´, HISTORICOPRECOS.IDHISTORICO, PRODUTOS.REFERENCIAINTERNA, PRODUTOS.ESTAGIO,TIPOPRODUTO.DESCRICAOTIPOPRODUTO
from HISTORICOPRECOS, PRODUTOS, TIPOPRODUTO
where HISTORICOPRECOS.IDPRODUTO = PRODUTOS.IDPRODUTO and PRODUTOS.IDTIPOPRODUTO = TIPOPRODUTO.IDTIPOPRODUTO and PRODUTOS.REFERENCIAINTERNA like :REFERENCIAINTERNA´
Se alguém puder ajudar, agradeço imensamente.
Leo
Leoback
Curtir tópico
+ 0Posts
08/02/2005
Bon Jovi
Gostei + 0
08/02/2005
Nandolh
select max (HISTORICOPRECOS.VALORCOTADO) as ´Valor´, HISTORICOPRECOS.IDHISTORICO, PRODUTOS.REFERENCIAINTERNA, PRODUTOS.ESTAGIO,TIPOPRODUTO.DESCRICAOTIPOPRODUTO
from HISTORICOPRECOS, PRODUTOS, TIPOPRODUTO
where HISTORICOPRECOS.IDPRODUTO = PRODUTOS.IDPRODUTO and PRODUTOS.IDTIPOPRODUTO = TIPOPRODUTO.IDTIPOPRODUTO and PRODUTOS.REFERENCIAINTERNA like :REFERENCIAINTERNA
group by HISTORICOPRECOS.IDHISTORICO, PRODUTOS.REFERENCIAINTERNA, PRODUTOS.ESTAGIO,TIPOPRODUTO.DESCRICAOTIPOPRODUTO
Gostei + 0
08/02/2005
Leoback
Valeu Nando! Agora funcionou... Irmão, na tabela HistoricoPrecos tem uma série de valores para cada Produto cadastrado... desse modo eu gostaria de ao escolher um produto o select me retornar o maior VALORCOTADO para ele... Não estou conseguindo sair de jeito nenhum... Se puderes ajudar mais uma vez agradeço.
Segue o relacionamento entre as tabelas...
Um grande abraço.
Leo
[img:6188395114]http://www.cpibrasil.winconnection.net/ftp/01.jpg[/img:6188395114]
Gostei + 0
10/02/2005
Nandolh
Retire o campo HISTORICOPRECOS.IDHISTORICO pois ele é uma informação variável e portanto não tem como agrupá-lo,
select max (HISTORICOPRECOS.VALORCOTADO) as ´Valor´, PRODUTOS.REFERENCIAINTERNA, PRODUTOS.ESTAGIO,TIPOPRODUTO.DESCRICAOTIPOPRODUTO
from HISTORICOPRECOS, PRODUTOS, TIPOPRODUTO
where PRODUTOS.IDTIPOPRODUTO = TIPOPRODUTO.IDTIPOPRODUTO and PRODUTOS.REFERENCIAINTERNA like :REFERENCIAINTERNA
group by RODUTOS.REFERENCIAINTERNA, PRODUTOS.ESTAGIO,TIPOPRODUTO.DESCRICAOTIPOPRODUTO
Abraços
Herrmann
Gostei + 0
11/02/2005
Leoback
Herman, meu amigo, perdoe-me pela confusão que estou fazendo mas esse código é muito importante para mim no momento. O que pretendo é selecionar o último VALORCOTADO e não o maior VALORCOTADO como dissera anteriormente. Eu gostaria que o select ao ser executado retornasse o último IDHISTORICO em correspondência com o VALORCOTADO. Tentei dar um Select max (HP.IDHISTORICO) as ´IDHIST´ <resto do código> sem incluir esse campo no Group by mas não funciounou... O select retorna todos os campos IDHISTORICO...
Se puder ajudar mais uma vez agradeço.
Um grande abraço,
Leo
Gostei + 0
11/02/2005
Nandolh
Posso te passar um exemplo:
Tenho uma tabela de Históricos e outra de Centros de Custo. Cada Historico possui um Centro de Custo. Desejo obter o maior Historico, descricao do historico e seu respectivo Centro de Custo...
SELECT[b:4497483f7b] FIRST 1 MAX[/b:4497483f7b](H.COD_HISTORICO), H.DES_HISTORICO, C.DES_CUSTO FROM HISTORICO H
JOIN CENTRO_CUSTO C ON C.COD_CUSTO = H.COD_CUSTO
GROUP BY H.COD_HISTORICO,H.DES_HISTORICO,C.DES_CUSTO
ORDER BY H.COD_HISTORICO [b:4497483f7b]DESC[/b:4497483f7b]
Observe o [b:4497483f7b]DESC[/b:4497483f7b] no order by e o[b:4497483f7b] FIRST 1[/b:4497483f7b] logo depois do SELECT...
Talvez isto lhe ajude: faça um order by DESC em IDHISTORICO e um first 1 no SELECT. Importante: O [b:4497483f7b]DESC[/b:4497483f7b] precisa ser colocado imediatamente depois de cada campo que vc deseja por em ordem decrescente.
Gostei + 0
12/02/2005
Leoback
Um abraço,
Leo
Gostei + 0
13/02/2005
Emerson Nascimento
SELECT MAX(H.COD_HISTORICO), H.DES_HISTORICO, C.DES_CUSTO FROM HISTORICO H
JOIN CENTRO_CUSTO C ON C.COD_CUSTO = H.COD_CUSTO
GROUP BY H.COD_HISTORICO,H.DES_HISTORICO,C.DES_CUSTO
ORDER BY H.COD_HISTORICO DESC
ROWS 1
Gostei + 0
13/02/2005
Emerson Nascimento
SELECT H.COD_HISTORICO, H.DES_HISTORICO, C.DES_CUSTO
FROM HISTORICO H
LEFT JOIN CENTRO_CUSTO C ON (C.COD_CUSTO = H.COD_CUSTO)
ORDER BY H.COD_HISTORICO DESC
ROWS 1
Gostei + 0
16/02/2005
Leoback
Valeu Emerson! O código funcionou a contento.... mas tem um detalhe... o que preciso é que o Select retorne máximo valor do COD_HISTORICO para cada DES_CUSTO e único... seria mais ou menos assim (ver figura abaixo)...
Tabela com todos os registros: Select... where (CENTROCUSTO.DES_CUSTO LIKE ´¬´)
[img:802106f4c5]http://cpibrasil.winconnection.net/ftp/imagem.jpg[/img:802106f4c5]
O que preciso é que a tabela contenha o máximo valor do COD_HISTORICO para cada DES_CUSTO (Unico)...
[img:802106f4c5]http://cpibrasil.winconnection.net/ftp/imagem2.jpg[/img:802106f4c5]
Espero que tenha entendido e possa me ajudar mais uma vez.
Um cordial abraço,
Leo
Gostei + 0
16/02/2005
Emerson Nascimento
SELECT MAX(H.COD_HISTORICO) COD_HISTORICO, (select DES_HISTORICO from HISTORICO where HISTORICO.COD_HISTORICO=Max(H.COD_HISTORICO)) DES_HISTORICO, C.DES_CUSTO FROM HISTORICO H JOIN CENTRO_CUSTO C ON (C.COD_CUSTO = H.COD_CUSTO) GROUP BY H.COD_CUSTO, C.DES_CUSTO
Gostei + 0
17/02/2005
Leoback
Infelizmente o Select não rodou mas acho que você passou a idéia de que com uma subquery o resultado sai. Vou pesquisar com algum material que tenho para tentar validar o Select.
Um grande abraço,
Leo
Gostei + 0
18/02/2005
Emerson Nascimento
Gostei + 0
19/02/2005
Leoback
No momento estou utilizando a versão IB 7.1 da Borland.
Abraços,
Leo
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)