[firebase-br] RES: Ajuda SQL

JohnatanSG jtoledo em softguild.com.br
Qui Maio 14 12:02:04 -03 2009


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





Mais detalhes sobre a lista de discussão lista