[firebase-br] RES: Ajuda SQL
Tiago
tijgrillo em gmail.com
Qui Maio 14 13:32:10 -03 2009
É Johnatan acho que pro meu caso, tenho que me contentar com o SQL que tenho
e terminar o filtro via código mesmo...Vou brigar mais um pouco por aqui e
ver também se resolvo via código, depois posto o que resolvi...
De qualquer forma, obrigado a todos..
ps: Mas se alguém tiver uma (qualquer que seja) ideia é só falar..
2009/5/14 JohnatanSG <jtoledo em softguild.com.br>
> Realmente desta forma vai ficar mais lento... ainda mais, senão Houver
> índice na sua View... como postei em um email
> Anterior fiz daquele modo que te mostrei, direto na tebela com mais de
> 300.000 registros, e levou menos de UM segundo pra me retornar com a
> pesquisa....
>
>
>
> -----Mensagem original-----
> De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br]
> Em
> nome de Tiago
> Enviada em: quinta-feira, 14 de maio de 2009 11:16
> Para: FireBase
> Assunto: Re: [firebase-br] Ajuda SQL
>
> Sandro sempre ajuda..rsrss
> Seguinte, o seu e o do Johnatan ficaram lentos demais (o do Sandro sem o
> indice sugerido por ele) mas funcionaram.
> O do Daniel da erro, acredito por que não possa ter ...UL.DATA_EMISSAO =
> Max(DATA_EMISSAO) na clausula WHERE...
>
> Talvez eu tenha falhado ao não dizer que é uma consulta cujo resultado
> será disponibilizado via Webservices, então velocidade conta e que minha
> "tabela" V_ULTPRODCOMPRADOS já é uma VIEW (meu firebird 1.5) então Sandro
> onde eu crio o indice? não achei como fazer isto na VIEW.
> Fiz uma adaptação com a ideia de vocês que ficou pouco mais rapido, mas
> lento também uns 40 seg...Segue o que fiz:
>
> SELECT
> CODPRODUTO,
> CODVENDEDOR,
> CODCLIENTE,
> DESCR_PROD,
> VALOR, -- SEM ESTA LINHA TRAZ O QUE QUERO, COLOCANDO ELA, O PROBLEMA.
> MAX(DATA_EMISSAO) AS DATA_EMISSAO
> FROM
> V_ULTPRODCOMPRADOS UL
> WHERE
> CODVENDEDOR = :CODVEN AND
> UL.DATA_EMISSAO = (SELECT MAX(DATA_EMISSAO) FROM V_ULTPRODCOMPRADOS UL2
> WHERE UL2.CODPRODUTOS = UL.CODPRODUTOS AND UL2.CODCLIENTE = UL.CODCLIENTE)
> GROUP BY
> CODPRODUTO,CODVENDEDOR,CODCLIENTE,DESCR_PROD
>
> Será que a solução para é trazer normal mesmo e fazer o filtro via
> programação? o que acham?
>
>
> Obrigado,
> Tiago
>
>
> 2009/5/14 DanielN <danieln.desenvol em supersoft.com.br>
>
> > Tiago tente mudar seu select para
> >
> > SELECT UL.CODPRODUTO, UL.CODVENDEDOR, UL.CODCLIENTE, UL.DESCR_PROD,
> > (Select UL2.Valor from V_ULTPRODCOMPRADOS as UL2
> > where UL.CODPRODUTO = UL2.CODPRODUTO
> > and UL.DATA_EMISSAO = Max(DATA_EMISSAO)) as Valor,
> > MAX(DATA_EMISSAO) AS DATA_EMISSAO
> > FROM V_ULTPRODCOMPRADOS as UL
> > WHERE UL.CODVENDEDOR = :CODVEN
> > GROUP BY UL.CODPRODUTO, UL.CODVENDEDOR, UL.CODCLIENTE, UL.DESCR_PROD
> >
> >
> >
> > Tiago escreveu:
> >
> >> Olâ a todos,
> >>
> >> Estou com um problema com este sql, se puderem me ajudar
> fico
> >> grato. Tenho uma tabela com mais ou menos assim:
> >>
> >> CODPRODUTO DESCR_PROD CODVENDEDOR CODCLIENTE DATA_EMISSAO VALOR
> >> 1 A
> >> 4 5 01/05/08 12,25
> >> 1 A
> >> 4 5 12/10/08 45,10
> >> 1 A
> >> 4 5 01/05/09 32,25
> >> 2 B
> >> 4 6 01/01/09 99,99
> >> 2 B
> >> 4 6 12/05/09 88,41
> >> 3 C
> >> 4 7 01/05/09 43,14
> >>
> >> O que quero é apenas 1 PRODUTO para sua DATA MAIS ATUAL
> >> (MAX()), por exemplo, o produto A viria só a terceira linha tabela
> acima.
> >> Meu problema é agrupar isto, sendo que o VALOR é diferente para cada
> >> registro.
> >>
> >> SELECT
> >> CODPRODUTO,
> >> CODVENDEDOR,
> >> CODCLIENTE,
> >> DESCR_PROD,
> >> VALOR, -- SEM ESTA LINHA TRAZ O QUE QUERO, COLOCANDO ELA, O PROBLEMA.
> >> MAX(DATA_EMISSAO) AS DATA_EMISSAO
> >> FROM
> >> V_ULTPRODCOMPRADOS UL
> >> WHERE
> >> CODVENDEDOR = :CODVEN
> >> GROUP BY
> >> CODPRODUTO,CODVENDEDOR,CODCLIENTE,DESCR_PROD
> >>
> >> Alguém tem alguma ideia?
> >>
> >> obrigado,
> >> Tiago
> >> ______________________________________________
> >> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> >> Para saber como gerenciar/excluir seu cadastro na lista, use:
> >> http://www.firebase.com.br/fb/artigo.php?id=1107
> >> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
> >>
> >>
> >>
> >
> >
> > ______________________________________________
> > FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> > Para saber como gerenciar/excluir seu cadastro na lista, use:
> > http://www.firebase.com.br/fb/artigo.php?id=1107
> > Para consultar mensagens antigas: http://firebase.com.br/pesquisa
> >
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
> No virus found in this incoming message.
> Checked by AVG - www.avg.com
> Version: 8.5.329 / Virus Database: 270.12.29/2114 - Release Date: 05/14/09
> 06:28:00
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
Mais detalhes sobre a lista de discussão lista