ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Analise demorada

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
eremita
Aprendiz
Aprendiz


Registrado: Domingo, 7 de Janeiro de 2007
Mensagens: 228

MensagemEnviada: Sex Mai 13, 2016 10:16 pm    Assunto: Analise demorada Responder com Citação

Olá, a rotina abaixo esta demorando consideravelmente para demonstrar um comparativo de lucro sobre as vendas de cada produto. A lógica toda é simples, porém a execução... Alguma sugestao de como melhorar o código?

Código:
qry1 = SELECT DISTINCT i.id, i.cod_produto, p.nome, i.dt_historico, i.lucro FROM itens_historico_tabela_preco i LEFT JOIN produtos p ON i.cod_produto = p.codigo WHERE (i.corrigido = 'N' or corrigido is null) AND i.cod_tabela = :p1 ORDER BY p.nome, i.dt_historico DESC, i.codigo DESC

while not qry1.eof do
 begin
  cdscodpro.asinteger = qry1.fieldbyname('cod_produto').asinteger;
  cdsnompro.asstring = qry1.fieldbyname('nome').asstring;
  cdsdata1.asdatetime = qry1.fieldbyname('dt_historico').asdatetime;
  cdslucro1.asfloat = qry1.fieldbyname('lucro').asfloat;

  qry2 = SELECT DISTINCT i.id, i.dt_historico, i.lucro FROM itens_historico_tabela_preco i WHERE i.cod_produto = :p1 AND i.cod_tabela = :p2 AND i.id < :p3 ORDER BY i.dt_historico DESC, i.codigo DESC LIMIT 1

  cdsdata2.asdatetime = qry2.fieldbyname('dt_historico').asdatetime;
  cdslucro2.asfloat = qry2.fieldbyname('lucro').asfloat;

  qry3 = SELECT DISTINCT i.id, i.dt_historico, i.lucro FROM itens_historico_tabela_preco i WHERE i.cod_produto = :p1 AND i.cod_tabela = :p2 AND i.id < :p3 ORDER BY i.dt_historico DESC, i.codigo DESC LIMIT 1

  cdsdata3.asdatetime = qry3.fieldbyname('dt_historico').asdatetime;
  cdslucro3.asfloat = qry3.fieldbyname('lucro').asfloat;

  qry1.next;
end


Desde já agradeço,

*D7 + Postgresql
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
eremita
Aprendiz
Aprendiz


Registrado: Domingo, 7 de Janeiro de 2007
Mensagens: 228

MensagemEnviada: Dom Mai 22, 2016 6:28 pm    Assunto: Responder com Citação

Ainda não consegui, mas continuo tentando ...
Pela lógica do codigo, montei o codigo abaixo porém estou com o seguinte erro. Syntax error at or near "union"
Código:

SELECT
*
FROM(
(SELECT DISTINCT i.codigo, i.cod_produto, p.nome, i.dt_historico as dt1, i.lucro as lc1, null as dt2, null as lc2, null as dt3, null as lc3 FROM itens_historico_tabela_preco i LEFT JOIN produtos p ON i.cod_produto = p.codigo WHERE (i.corrigido = 'N' or corrigido is null) AND i.cod_tabela = 2 ORDER BY p.nome, i.dt_historico DESC, i.codigo DESC) as a1
union
(SELECT DISTINCT i.codigo, i.cod_produto, p.nome, null as dt1, null as lc1, i.dt_historico as dt2, i.lucro as lc2, null as dt3, null as lc3 FROM itens_historico_tabela_preco i LEFT JOIN produtos p ON i.cod_produto = p.codigo WHERE i.cod_produto = a1.cod_produto AND i.cod_tabela = 2 AND i.codigo < a1.codigo ORDER BY i.dt_historico DESC, i.codigo DESC LIMIT 1) as a2
union
(SELECT DISTINCT i.codigo, i.cod_produto, p.nome, null as dt1, null as lc1, null as dt2, null as lc2, i.dt_historico as dt3, i.lucro as lc3 FROM itens_historico_tabela_preco i LEFT JOIN produtos p ON i.cod_produto = p.codigo WHERE i.cod_produto = a2.cod_produto AND i.cod_tabela = 2 AND i.codigo < a2.codigo ORDER BY i.dt_historico DESC, i.codigo DESC LIMIT 1) as a3
)
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB