Tempo de execução da Query

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
douglasmattos
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 75
Registrado em: Seg, 19 Mar 2012 2:28 pm

Pessoal Bom dia!

Preciso tirar uma dúvida com vocês.
Tenho a Query abaixo que demora em torno de 30 segundos para gerar o resultado.

Gostaria de saber se tem algo que posso fazer para melhorar o desempenho, pois quando utilizo um union com a mesma Query o tempo aumenta muito..

Selecionar tudo

SELECT TO_CHAR(ATENDIME.DT_ATENDIMENTO,'MM/YYYY')mês_ANO
            ,COUNT(*)mês_ATUAL
  FROM DBAMV.ATENDIME 
 WHERE ATENDIME.cd_multi_empresa = 3
      AND ATENDIME.tp_atendimento in ('U','A')
      AND TO_CHAR(ATENDIME.DT_ATENDIMENTO,'MM/YYYY') = TO_CHAR(SYSDATE,'MM/YYYY')
  GROUP BY TO_CHAR(ATENDIME.DT_ATENDIMENTO,'MM/YYYY')
Avatar do usuário
stcoutinho
Moderador
Moderador
Mensagens: 850
Registrado em: Qua, 11 Mai 2011 5:15 pm
Localização: são Paulo - SP

DouglasMattos,

Tudo bem?

Eu não sou especialista em performance, mas poderia lhe dar algumas sugestões.

No seu WHERE, seria interessante evitar a conversão de DT_ATENDIMENTO via TO_CHAR. Opte por usar o formato DD/MM/YYYY, e verifique se a data se encontra em um determinado mês com ajuda das funções de data ADD_MONTH, LAST_DAY e o comparador BETWEEN. Por exemplo:

Selecionar tudo

ANTES:  AND TO_CHAR(ATENDIME.DT_ATENDIMENTO,'MM/YYYY') = TO_CHAR(SYSDATE,'MM/YYYY')
DEPOIS: AND ATENDIME.DT_ATENDIMENTO BEETWEEN LAST_DAY(ADD_MONTHS(SYSDATE,-1))+1,LAST_DAY(SYSDATE)
Talvez seja possível obter resultados melhores no WHERE acima se esta coluna de DT_ATENDIMENTO se encontrar indexada.

Agora, você também poderia verificar a cardinalidade (qtde de resgistros diferentes) das colunas CD_MULTI_EMPRESA e TP_ATENDIMENTO. Se por exemplo a tabela tiver milhões, mas milhares de registros com CD_MULTI_EMPRESA = 3, pode ser que haja (não é garantia) uma melhora de performance. O mesmo vale para coluna TP_ATENDIMENTO.

Você poderia avaliar se valeria a pena criar indices compostos formados pelas DT_ATENDIMENTO,CD_MULTI_EMPRESA,TP_ATENDIMENTO. Talvez algumas combinações entre estas colunas ofereça um resultado mais satisfatório para você. Se você optar por criar um indice composto, talvez seja melhor começar pela coluna de DT_ATENDIMENTO.

Finalizando, não creio que existam respostas prontas ou únicas para seu caso. Você precisará levar em conta uma série de fatores, como quantidade de registros na tabela, existência de índices, se a tabela é particionada ou não. É uma questão de fazer tentativas até achar (ou não) um resultado melhor.

Creio que os foristas podem lhe dar outras sugestões interessantes.

Abraços e boa sorte !

Sergio Coutinho
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

Como foi dito o ideal é que o campo "ATENDIME.DT_ATENDIMENTO" tenha índice. Caso já tenha quando você utiliza uma função em cima do campo, como no caso TO_CHAR, o benefício do índice é perdido.
Existe a possibilidade de criar um índice com a função específica, no caso um índice com o TO_CHAR.
Porém recomendo que ao invés de usar seu filtro:

Selecionar tudo

SELECT TO_CHAR(ATENDIME.DT_ATENDIMENTO,'MM/YYYY') mês_ANO
...
AND TO_CHAR(ATENDIME.DT_ATENDIMENTO,'MM/YYYY') = TO_CHAR(SYSDATE,'MM/YYYY') 
utilizar o seguinte:

Selecionar tudo

SELECT TO_CHAR(SYSDATE,'MM/YYYY') mês_ANO
....
AND ATENDIME.DT_ATENDIMENTO BETWEEN TRUNC(SYSDATE,'MM') AND LAST_DAY(SYSDATE)
Ou mesmo usar o TRUNC do SYSDATE para agrupar.

Seria ideal ver o union, pois talvez possa utilizar apenas um select.
douglasmattos
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 75
Registrado em: Seg, 19 Mar 2012 2:28 pm

Noctifero e stcoutinho muito obrigado pelas dicas.

Vou analisar a minha tabela e verificar se o campo DT_ATENDIMENTO tem INDICE. Pelo que vi não tem.

Já a coluna CD_MULTI_EMPRESA tenho somente os valores 1 e 3. A coluna TP_ATENDIMENTO tenho as possibilidades (U,I,A,E)

Vou realizar alguns testes com as dicas de vocês e verificar se tenho uma melhora no resultado da minha Query.

Valeu mesmo pela ajuda, Muito Obrigado. :D :D :D
douglasmattos
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 75
Registrado em: Seg, 19 Mar 2012 2:28 pm

Pessoal,

Executei a Query utilizando as dicas do ( stcoutinho ) e o resultado foi muito bom. Antes demora em torno de 16 segundos para gerar, agora demorou apenas 1 segundo....

Quando utilizava os UNION a minha query demora em média 3 minutos para gerar, agora demora 5 segundos...

Nada como falar com os Mestres...rsrs :D :D :D :D

Selecionar tudo

SELECT MAX(mês_ANO)mês_ANO
       ,SUM(mês_ATUAL)mês_ATUAL
       ,MAX(mês_ANT_1)mês_ANT_1
       ,SUM(TOTAL_ANT_1)TOTAL_ANT_1
       ,MAX(mês_ANT_2)mês_ANT_2
       ,SUM(TOTAL_ANT_2)TOTAL_ANT_2
       ,MAX(mês_ANT_3)mês_ANT_3
       ,SUM(TOTAL_ANT_3)TOTAL_ANT_3
       ,MAX(mês_ANT_4)mês_ANT_4
       ,SUM(TOTAL_ANT_4)TOTAL_ANT_4
       ,MAX(mês_ANT_5)mês_ANT_5
       ,SUM(TOTAL_ANT_5)TOTAL_ANT_5
       ,MAX(mês_ANT_6)mês_ANT_6
       ,SUM(TOTAL_ANT_6)TOTAL_ANT_6
       ,MAX(mês_ANT_7)mês_ANT_7
       ,SUM(TOTAL_ANT_7)TOTAL_ANT_7
       ,MAX(mês_ANT_8)mês_ANT_8
       ,SUM(TOTAL_ANT_8)TOTAL_ANT_8
       ,MAX(mês_ANT_9)mês_ANT_9
       ,SUM(TOTAL_ANT_9)TOTAL_ANT_9
       ,MAX(mês_ANT_10)mês_ANT_10
       ,SUM(TOTAL_ANT_10)TOTAL_ANT_10
       ,MAX(mês_ANT_11)mês_ANT_11
       ,SUM(TOTAL_ANT_11)TOTAL_ANT_11
       ,MAX(mês_ANT_12)mês_ANT_12
       ,SUM(TOTAL_ANT_12)TOTAL_ANT_12
 FROM(
SELECT TO_CHAR(ATENDIME.DT_ATENDIMENTO,'MM/YYYY')mês_ANO
       ,COUNT(*)mês_ATUAL
       ,'' mês_ANT_1
       ,0 TOTAL_ANT_1
       ,'' mês_ANT_2
       ,0 TOTAL_ANT_2
       ,'' mês_ANT_3
       ,0 TOTAL_ANT_3              
       ,'' mês_ANT_4
       ,0 TOTAL_ANT_4
       ,'' mês_ANT_5
       ,0 TOTAL_ANT_5
       ,'' mês_ANT_6
       ,0 TOTAL_ANT_6
       ,'' mês_ANT_7
       ,0 TOTAL_ANT_7
       ,'' mês_ANT_8
       ,0 TOTAL_ANT_8
       ,'' mês_ANT_9
       ,0 TOTAL_ANT_9
       ,'' mês_ANT_10
       ,0 TOTAL_ANT_10
       ,'' mês_ANT_11
       ,0 TOTAL_ANT_11
       ,'' mês_ANT_12
       ,0 TOTAL_ANT_12                                                        
       ,'' mês_ANT_13
       ,0 TOTAL_ANT_13  
  FROM DBAMV.ATENDIME 
 WHERE ATENDIME.cd_multi_empresa = 3
   AND ATENDIME.tp_atendimento in ('U','A')
   AND ATENDIME.DT_ATENDIMENTO BETWEEN TO_DATE(LAST_DAY(ADD_MONTHS(SYSDATE,-1))+1,'DD/MM/YYYY') AND TO_DATE(LAST_DAY(SYSDATE),'DD/MM/YYYY')
  GROUP BY TO_CHAR(ATENDIME.DT_ATENDIMENTO,'MM/YYYY')

UNION ALL
  
SELECT '' mês_ANT_0
       ,0 TOTAL_ANT_0
       ,TO_CHAR(ATENDIME.DT_ATENDIMENTO,'MM/YYYY')mês_ANO
       ,COUNT(*)mês_ATUAL       
       ,'' mês_ANT_2
       ,0 TOTAL_ANT_2
       ,'' mês_ANT_3
       ,0 TOTAL_ANT_3              
       ,'' mês_ANT_4
       ,0 TOTAL_ANT_4
       ,'' mês_ANT_5
       ,0 TOTAL_ANT_5
       ,'' mês_ANT_6
       ,0 TOTAL_ANT_6
       ,'' mês_ANT_7
       ,0 TOTAL_ANT_7
       ,'' mês_ANT_8
       ,0 TOTAL_ANT_8
       ,'' mês_ANT_9
       ,0 TOTAL_ANT_9
       ,'' mês_ANT_10
       ,0 TOTAL_ANT_10
       ,'' mês_ANT_11
       ,0 TOTAL_ANT_11
       ,'' mês_ANT_12
       ,0 TOTAL_ANT_12  
       ,'' mês_ANT_13
       ,0 TOTAL_ANT_13        
  FROM DBAMV.ATENDIME 
 WHERE ATENDIME.cd_multi_empresa = 3
   AND ATENDIME.tp_atendimento in ('U','A')
   AND ATENDIME.DT_ATENDIMENTO BETWEEN TO_DATE(LAST_DAY(ADD_MONTHS(SYSDATE,-2))+1,'DD/MM/YYYY') AND TO_DATE(LAST_DAY(ADD_MONTHS(SYSDATE,-1)),'DD/MM/YYYY')
  GROUP BY TO_CHAR(ATENDIME.DT_ATENDIMENTO,'MM/YYYY')  

UNION ALL
  
SELECT '' mês_ANT_0
       ,0 TOTAL_ANT_0
       ,'' mês_ANT_1
       ,0 TOTAL_ANT_1
       ,TO_CHAR(ATENDIME.DT_ATENDIMENTO,'MM/YYYY')mês_ANO
       ,COUNT(*)mês_ATUAL         
       ,'' mês_ANT_3
       ,0 TOTAL_ANT_3              
       ,'' mês_ANT_4
       ,0 TOTAL_ANT_4
       ,'' mês_ANT_5
       ,0 TOTAL_ANT_5
       ,'' mês_ANT_6
       ,0 TOTAL_ANT_6
       ,'' mês_ANT_7
       ,0 TOTAL_ANT_7
       ,'' mês_ANT_8
       ,0 TOTAL_ANT_8
       ,'' mês_ANT_9
       ,0 TOTAL_ANT_9
       ,'' mês_ANT_10
       ,0 TOTAL_ANT_10
       ,'' mês_ANT_11
       ,0 TOTAL_ANT_11
       ,'' mês_ANT_12
       ,0 TOTAL_ANT_12  
       ,'' mês_ANT_13
       ,0 TOTAL_ANT_13        
  FROM DBAMV.ATENDIME 
 WHERE ATENDIME.cd_multi_empresa = 3
   AND ATENDIME.tp_atendimento in ('U','A')
   AND ATENDIME.DT_ATENDIMENTO BETWEEN TO_DATE(LAST_DAY(ADD_MONTHS(SYSDATE,-3))+1,'DD/MM/YYYY') AND TO_DATE(LAST_DAY(ADD_MONTHS(SYSDATE,-2)),'DD/MM/YYYY')
  GROUP BY TO_CHAR(ATENDIME.DT_ATENDIMENTO,'MM/YYYY')    

UNION ALL
  
SELECT '' mês_ANT_0
       ,0 TOTAL_ANT_0
       ,'' mês_ANT_1
       ,0 TOTAL_ANT_1
       ,'' mês_ANT_2
       ,0 TOTAL_ANT_2              
       ,TO_CHAR(ATENDIME.DT_ATENDIMENTO,'MM/YYYY')mês_ANO
       ,COUNT(*)mês_ATUAL          
       ,'' mês_ANT_4
       ,0 TOTAL_ANT_4
       ,'' mês_ANT_5
       ,0 TOTAL_ANT_5
       ,'' mês_ANT_6
       ,0 TOTAL_ANT_6
       ,'' mês_ANT_7
       ,0 TOTAL_ANT_7
       ,'' mês_ANT_8
       ,0 TOTAL_ANT_8
       ,'' mês_ANT_9
       ,0 TOTAL_ANT_9
       ,'' mês_ANT_10
       ,0 TOTAL_ANT_10
       ,'' mês_ANT_11
       ,0 TOTAL_ANT_11
       ,'' mês_ANT_12
       ,0 TOTAL_ANT_12  
       ,'' mês_ANT_13
       ,0 TOTAL_ANT_13        
  FROM DBAMV.ATENDIME 
 WHERE ATENDIME.cd_multi_empresa = 3
   AND ATENDIME.tp_atendimento in ('U','A')
   AND ATENDIME.DT_ATENDIMENTO BETWEEN TO_DATE(LAST_DAY(ADD_MONTHS(SYSDATE,-4))+1,'DD/MM/YYYY') AND TO_DATE(LAST_DAY(ADD_MONTHS(SYSDATE,-3)),'DD/MM/YYYY')
  GROUP BY TO_CHAR(ATENDIME.DT_ATENDIMENTO,'MM/YYYY')    

UNION ALL
  
SELECT '' mês_ANT_0
       ,0 TOTAL_ANT_0
       ,'' mês_ANT_1
       ,0 TOTAL_ANT_1
       ,'' mês_ANT_2
       ,0 TOTAL_ANT_2              
       ,'' mês_ANT_3
       ,0 TOTAL_ANT_3
       ,TO_CHAR(ATENDIME.DT_ATENDIMENTO,'MM/YYYY')mês_ANO
       ,COUNT(*)mês_ATUAL         
       ,'' mês_ANT_5
       ,0 TOTAL_ANT_5
       ,'' mês_ANT_6
       ,0 TOTAL_ANT_6
       ,'' mês_ANT_7
       ,0 TOTAL_ANT_7
       ,'' mês_ANT_8
       ,0 TOTAL_ANT_8
       ,'' mês_ANT_9
       ,0 TOTAL_ANT_9
       ,'' mês_ANT_10
       ,0 TOTAL_ANT_10
       ,'' mês_ANT_11
       ,0 TOTAL_ANT_11
       ,'' mês_ANT_12
       ,0 TOTAL_ANT_12  
       ,'' mês_ANT_13
       ,0 TOTAL_ANT_13        
  FROM DBAMV.ATENDIME 
 WHERE ATENDIME.cd_multi_empresa = 3
   AND ATENDIME.tp_atendimento in ('U','A')
   AND ATENDIME.DT_ATENDIMENTO BETWEEN TO_DATE(LAST_DAY(ADD_MONTHS(SYSDATE,-5))+1,'DD/MM/YYYY') AND TO_DATE(LAST_DAY(ADD_MONTHS(SYSDATE,-4)),'DD/MM/YYYY')
  GROUP BY TO_CHAR(ATENDIME.DT_ATENDIMENTO,'MM/YYYY')    

UNION ALL
  
SELECT '' mês_ANT_0
       ,0 TOTAL_ANT_0
       ,'' mês_ANT_1
       ,0 TOTAL_ANT_1
       ,'' mês_ANT_2
       ,0 TOTAL_ANT_2              
       ,'' mês_ANT_3
       ,0 TOTAL_ANT_3
       ,'' mês_ANT_4
       ,0 TOTAL_ANT_4
       ,TO_CHAR(ATENDIME.DT_ATENDIMENTO,'MM/YYYY')mês_ANO
       ,COUNT(*)mês_ATUAL           
       ,'' mês_ANT_6
       ,0 TOTAL_ANT_6
       ,'' mês_ANT_7
       ,0 TOTAL_ANT_7
       ,'' mês_ANT_8
       ,0 TOTAL_ANT_8
       ,'' mês_ANT_9
       ,0 TOTAL_ANT_9
       ,'' mês_ANT_10
       ,0 TOTAL_ANT_10
       ,'' mês_ANT_11
       ,0 TOTAL_ANT_11
       ,'' mês_ANT_12
       ,0 TOTAL_ANT_12  
       ,'' mês_ANT_13
       ,0 TOTAL_ANT_13        
  FROM DBAMV.ATENDIME 
 WHERE ATENDIME.cd_multi_empresa = 3
   AND ATENDIME.tp_atendimento in ('U','A')
   AND ATENDIME.DT_ATENDIMENTO BETWEEN TO_DATE(LAST_DAY(ADD_MONTHS(SYSDATE,-6))+1,'DD/MM/YYYY') AND TO_DATE(LAST_DAY(ADD_MONTHS(SYSDATE,-5)),'DD/MM/YYYY')
  GROUP BY TO_CHAR(ATENDIME.DT_ATENDIMENTO,'MM/YYYY')    

UNION ALL
  
SELECT '' mês_ANT_0
       ,0 TOTAL_ANT_0
       ,'' mês_ANT_1
       ,0 TOTAL_ANT_1
       ,'' mês_ANT_2
       ,0 TOTAL_ANT_2              
       ,'' mês_ANT_3
       ,0 TOTAL_ANT_3
       ,'' mês_ANT_4
       ,0 TOTAL_ANT_4
       ,'' mês_ANT_5
       ,0 TOTAL_ANT_5
       ,TO_CHAR(ATENDIME.DT_ATENDIMENTO,'MM/YYYY')mês_ANO
       ,COUNT(*)mês_ATUAL          
       ,'' mês_ANT_7
       ,0 TOTAL_ANT_7
       ,'' mês_ANT_8
       ,0 TOTAL_ANT_8
       ,'' mês_ANT_9
       ,0 TOTAL_ANT_9
       ,'' mês_ANT_10
       ,0 TOTAL_ANT_10
       ,'' mês_ANT_11
       ,0 TOTAL_ANT_11
       ,'' mês_ANT_12
       ,0 TOTAL_ANT_12  
       ,'' mês_ANT_13
       ,0 TOTAL_ANT_13        
  FROM DBAMV.ATENDIME 
 WHERE ATENDIME.cd_multi_empresa = 3
   AND ATENDIME.tp_atendimento in ('U','A')
   AND ATENDIME.DT_ATENDIMENTO BETWEEN TO_DATE(LAST_DAY(ADD_MONTHS(SYSDATE,-7))+1,'DD/MM/YYYY') AND TO_DATE(LAST_DAY(ADD_MONTHS(SYSDATE,-6)),'DD/MM/YYYY')
  GROUP BY TO_CHAR(ATENDIME.DT_ATENDIMENTO,'MM/YYYY')  
  
  UNION ALL
  
SELECT '' mês_ANT_0
       ,0 TOTAL_ANT_0
       ,'' mês_ANT_1
       ,0 TOTAL_ANT_1
       ,'' mês_ANT_2
       ,0 TOTAL_ANT_2              
       ,'' mês_ANT_3
       ,0 TOTAL_ANT_3
       ,'' mês_ANT_4
       ,0 TOTAL_ANT_4
       ,'' mês_ANT_5
       ,0 TOTAL_ANT_5
       ,'' mês_ANT_6
       ,0 TOTAL_ANT_6
       ,TO_CHAR(ATENDIME.DT_ATENDIMENTO,'MM/YYYY')mês_ANO
       ,COUNT(*)mês_ATUAL        
       ,'' mês_ANT_8
       ,0 TOTAL_ANT_8
       ,'' mês_ANT_9
       ,0 TOTAL_ANT_9
       ,'' mês_ANT_10
       ,0 TOTAL_ANT_10
       ,'' mês_ANT_11
       ,0 TOTAL_ANT_11
       ,'' mês_ANT_12
       ,0 TOTAL_ANT_12  
       ,'' mês_ANT_13
       ,0 TOTAL_ANT_13        
  FROM DBAMV.ATENDIME 
 WHERE ATENDIME.cd_multi_empresa = 3
   AND ATENDIME.tp_atendimento in ('U','A')
   AND ATENDIME.DT_ATENDIMENTO BETWEEN TO_DATE(LAST_DAY(ADD_MONTHS(SYSDATE,-8))+1,'DD/MM/YYYY') AND TO_DATE(LAST_DAY(ADD_MONTHS(SYSDATE,-7)),'DD/MM/YYYY')
  GROUP BY TO_CHAR(ATENDIME.DT_ATENDIMENTO,'MM/YYYY')  
  
    UNION ALL
  
SELECT '' mês_ANT_0
       ,0 TOTAL_ANT_0
       ,'' mês_ANT_1
       ,0 TOTAL_ANT_1
       ,'' mês_ANT_2
       ,0 TOTAL_ANT_2              
       ,'' mês_ANT_3
       ,0 TOTAL_ANT_3
       ,'' mês_ANT_4
       ,0 TOTAL_ANT_4
       ,'' mês_ANT_5
       ,0 TOTAL_ANT_5
       ,'' mês_ANT_6
       ,0 TOTAL_ANT_6
       ,'' mês_ANT_7
       ,0 TOTAL_ANT_7
       ,TO_CHAR(ATENDIME.DT_ATENDIMENTO,'MM/YYYY')mês_ANO
       ,COUNT(*)mês_ATUAL         
       ,'' mês_ANT_9
       ,0 TOTAL_ANT_9
       ,'' mês_ANT_10
       ,0 TOTAL_ANT_10
       ,'' mês_ANT_11
       ,0 TOTAL_ANT_11
       ,'' mês_ANT_12
       ,0 TOTAL_ANT_12  
       ,'' mês_ANT_13
       ,0 TOTAL_ANT_13        
  FROM DBAMV.ATENDIME 
 WHERE ATENDIME.cd_multi_empresa = 3
   AND ATENDIME.tp_atendimento in ('U','A')
   AND ATENDIME.DT_ATENDIMENTO BETWEEN TO_DATE(LAST_DAY(ADD_MONTHS(SYSDATE,-9))+1,'DD/MM/YYYY') AND TO_DATE(LAST_DAY(ADD_MONTHS(SYSDATE,-8)),'DD/MM/YYYY')
  GROUP BY TO_CHAR(ATENDIME.DT_ATENDIMENTO,'MM/YYYY')  
  
   UNION ALL
  
SELECT '' mês_ANT_0
       ,0 TOTAL_ANT_0
       ,'' mês_ANT_1
       ,0 TOTAL_ANT_1
       ,'' mês_ANT_2
       ,0 TOTAL_ANT_2              
       ,'' mês_ANT_3
       ,0 TOTAL_ANT_3
       ,'' mês_ANT_4
       ,0 TOTAL_ANT_4
       ,'' mês_ANT_5
       ,0 TOTAL_ANT_5
       ,'' mês_ANT_6
       ,0 TOTAL_ANT_6
       ,'' mês_ANT_7
       ,0 TOTAL_ANT_7
       ,'' mês_ANT_8
       ,0 TOTAL_ANT_8
       ,TO_CHAR(ATENDIME.DT_ATENDIMENTO,'MM/YYYY')mês_ANO
       ,COUNT(*)mês_ATUAL           
       ,'' mês_ANT_10
       ,0 TOTAL_ANT_10
       ,'' mês_ANT_11
       ,0 TOTAL_ANT_11
       ,'' mês_ANT_12
       ,0 TOTAL_ANT_12  
       ,'' mês_ANT_13
       ,0 TOTAL_ANT_13        
  FROM DBAMV.ATENDIME 
 WHERE ATENDIME.cd_multi_empresa = 3
   AND ATENDIME.tp_atendimento in ('U','A')
   AND ATENDIME.DT_ATENDIMENTO BETWEEN TO_DATE(LAST_DAY(ADD_MONTHS(SYSDATE,-10))+1,'DD/MM/YYYY') AND TO_DATE(LAST_DAY(ADD_MONTHS(SYSDATE,-9)),'DD/MM/YYYY')
  GROUP BY TO_CHAR(ATENDIME.DT_ATENDIMENTO,'MM/YYYY')  

   UNION ALL
  
SELECT '' mês_ANT_0
       ,0 TOTAL_ANT_0
       ,'' mês_ANT_1
       ,0 TOTAL_ANT_1
       ,'' mês_ANT_2
       ,0 TOTAL_ANT_2              
       ,'' mês_ANT_3
       ,0 TOTAL_ANT_3
       ,'' mês_ANT_4
       ,0 TOTAL_ANT_4
       ,'' mês_ANT_5
       ,0 TOTAL_ANT_5
       ,'' mês_ANT_6
       ,0 TOTAL_ANT_6
       ,'' mês_ANT_7
       ,0 TOTAL_ANT_7
       ,'' mês_ANT_8
       ,0 TOTAL_ANT_8
       ,'' mês_ANT_9
       ,0 TOTAL_ANT_9
       ,TO_CHAR(ATENDIME.DT_ATENDIMENTO,'MM/YYYY')mês_ANO
       ,COUNT(*)mês_ATUAL          
       ,'' mês_ANT_11
       ,0 TOTAL_ANT_11
       ,'' mês_ANT_12
       ,0 TOTAL_ANT_12  
       ,'' mês_ANT_13
       ,0 TOTAL_ANT_13        
  FROM DBAMV.ATENDIME 
 WHERE ATENDIME.cd_multi_empresa = 3
   AND ATENDIME.tp_atendimento in ('U','A')
   AND ATENDIME.DT_ATENDIMENTO BETWEEN TO_DATE(LAST_DAY(ADD_MONTHS(SYSDATE,-11))+1,'DD/MM/YYYY') AND TO_DATE(LAST_DAY(ADD_MONTHS(SYSDATE,-10)),'DD/MM/YYYY')
  GROUP BY TO_CHAR(ATENDIME.DT_ATENDIMENTO,'MM/YYYY')

   UNION ALL

SELECT '' mês_ANT_0
       ,0 TOTAL_ANT_0
       ,'' mês_ANT_1
       ,0 TOTAL_ANT_1
       ,'' mês_ANT_2
       ,0 TOTAL_ANT_2              
       ,'' mês_ANT_3
       ,0 TOTAL_ANT_3
       ,'' mês_ANT_4
       ,0 TOTAL_ANT_4
       ,'' mês_ANT_5
       ,0 TOTAL_ANT_5
       ,'' mês_ANT_6
       ,0 TOTAL_ANT_6
       ,'' mês_ANT_7
       ,0 TOTAL_ANT_7
       ,'' mês_ANT_8
       ,0 TOTAL_ANT_8
       ,'' mês_ANT_9
       ,0 TOTAL_ANT_9
       ,'' mês_ANT_10
       ,0 TOTAL_ANT_10
       ,TO_CHAR(ATENDIME.DT_ATENDIMENTO,'MM/YYYY')mês_ANO
       ,COUNT(*)mês_ATUAL          
       ,'' mês_ANT_12
       ,0 TOTAL_ANT_12  
       ,'' mês_ANT_13
       ,0 TOTAL_ANT_13        
  FROM DBAMV.ATENDIME 
 WHERE ATENDIME.cd_multi_empresa = 3
   AND ATENDIME.tp_atendimento in ('U','A')
   AND ATENDIME.DT_ATENDIMENTO BETWEEN TO_DATE(LAST_DAY(ADD_MONTHS(SYSDATE,-12))+1,'DD/MM/YYYY') AND TO_DATE(LAST_DAY(ADD_MONTHS(SYSDATE,-11)),'DD/MM/YYYY')
  GROUP BY TO_CHAR(ATENDIME.DT_ATENDIMENTO,'MM/YYYY')  

   UNION ALL

SELECT '' mês_ANT_0
       ,0 TOTAL_ANT_0
       ,'' mês_ANT_1
       ,0 TOTAL_ANT_1
       ,'' mês_ANT_2
       ,0 TOTAL_ANT_2              
       ,'' mês_ANT_3
       ,0 TOTAL_ANT_3
       ,'' mês_ANT_4
       ,0 TOTAL_ANT_4
       ,'' mês_ANT_5
       ,0 TOTAL_ANT_5
       ,'' mês_ANT_6
       ,0 TOTAL_ANT_6
       ,'' mês_ANT_7
       ,0 TOTAL_ANT_7
       ,'' mês_ANT_8
       ,0 TOTAL_ANT_8
       ,'' mês_ANT_9
       ,0 TOTAL_ANT_9
       ,'' mês_ANT_10
       ,0 TOTAL_ANT_10
       ,'' mês_ANT_11
       ,0 TOTAL_ANT_11  
       ,TO_CHAR(ATENDIME.DT_ATENDIMENTO,'MM/YYYY')mês_ANO
       ,COUNT(*)mês_ATUAL         
       ,'' mês_ANT_13
       ,0 TOTAL_ANT_13        
  FROM DBAMV.ATENDIME 
 WHERE ATENDIME.cd_multi_empresa = 3
   AND ATENDIME.tp_atendimento in ('U','A')
   AND ATENDIME.DT_ATENDIMENTO BETWEEN TO_DATE(LAST_DAY(ADD_MONTHS(SYSDATE,-13))+1,'DD/MM/YYYY') AND TO_DATE(LAST_DAY(ADD_MONTHS(SYSDATE,-12)),'DD/MM/YYYY')
  GROUP BY TO_CHAR(ATENDIME.DT_ATENDIMENTO,'MM/YYYY')   
       
  )
  


 
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 17 visitantes