|
ActiveDelphi .: O site do programador Delphi! :.
|
Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
eremita Aprendiz
Registrado: Domingo, 7 de Janeiro de 2007 Mensagens: 228
|
Enviada: Sex Mai 13, 2016 10:16 pm Assunto: Analise demorada |
|
|
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 |
|
|
eremita Aprendiz
Registrado: Domingo, 7 de Janeiro de 2007 Mensagens: 228
|
Enviada: Dom Mai 22, 2016 6:28 pm Assunto: |
|
|
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 |
|
|
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|