[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