[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