[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