[firebase-br] Ajuda SQL

Tiago tijgrillo em gmail.com
Qui Maio 14 11:15:55 -03 2009


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
>



Mais detalhes sobre a lista de discussão lista