Ir para conteúdo
Fórum Script Brasil
  • 0

Problema com SubQuery


jsergio.c

Pergunta

Boa noite galera,

Estou com o seguinte problema:

Preciso gerar uma query que retorne a quantidade evolutiva de encomendas recebidas por por filial. Se eu gerar um relatório no periodo de 02/2015 a 03/2015 por exemplo, devo consederar somente as filias que receberam encomendas no primeiro mes para mostrar a evolução destas filiais.

Exemplo:

vzjJbXq.png

A query que fiz quando deixo o subselect demora uma eternidade para rodar, mas quando eu passo os ids das filiais diretamente, ela roda tranquilamente.

SELECT 	
    filial.nome
    ,COUNT(encomenda.id_encomenda) AS 'QtdeEncomendas'
    ,EXTRACT(month FROM encomenda.dataRemessa) AS Mes
    ,EXTRACT(year FROM encomenda.dataRemessa) AS Ano
    
FROM encomenda
	INNER JOIN filial ON(filial.id_filial = encomenda.id_filial_destino)    
WHERE encomenda.id_filial_destino IN(SELECT e.id_filial_destino
					FROM encomenda e
					WHERE e.dataRemessa BETWEEN '2014-10-01 00:00:00' AND '2014-10-31 23:59:59'
                                     GROUP BY e.id_filial_destino
									)
	AND encomenda.dataRemessa BETWEEN '2014-10-01 00:00:00' AND '2014-11-30 23:59:59'
GROUP BY encomenda.id_filial_destino, Mes, Ano
ORDER BY nome, Ano, Mes
;
/*
Este aqui roda tranquilamente.
*/

SELECT 	
    filial.nome
    ,COUNT(encomenda.id_encomenda) AS 'QtdeEncomendas'
    ,EXTRACT(month FROM encomenda.dataRemessa) AS Mes
    ,EXTRACT(year FROM encomenda.dataRemessa) AS Ano
    
FROM encomenda
	INNER JOIN filial ON(filial.id_filial = encomenda.id_filial_destino)    
WHERE encomenda.id_filial_destino IN(1,2,3,4,5)									)
	AND encomenda.dataRemessa BETWEEN '2014-10-01 00:00:00' AND '2014-11-30 23:59:59'
GROUP BY encomenda.id_filial_destino, Mes, Ano
ORDER BY nome, Ano, Mes
;
Editado por jsergio.c
Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Ok. Então seu problema está neste trecho de código

SELECT e.id_filial_destino
                    FROM encomenda e
                    WHERE e.dataRemessa BETWEEN '2014-10-01 00:00:00' AND '2014-10-31 23:59:59'
GROUP BY e.id_filial_destino

Faça assim para melhorar:

1 - Verifique se existe índice para o atributo e.dataRemessa na tabela encomenda.

Se não existir, crie.

2 - Modifique este trcho de código para

 SELECT DISCTINCT e.id_filial_destino
                    FROM encomenda e
                    WHERE e.dataRemessa BETWEEN '2014-10-01 00:00:00' AND '2014-10-31 23:59:59'
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...