Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Ricardo Bezerra

Acerto na virada do mês

Recommended Posts

Boa tarde!

Tenho um script automatizado que, embora retorne o que preciso, por trazer informações d-1 e d-2, na virada do mês, não gera a informação desejada.

Como posso corrigir esse problema?

Agradeço à todos, desde já.

Script utilizado:

SELECT 'spot' as tipo
,(date(now())-0) as data_log,
  date(now())-1 AS 'Data Referencia', 
       CASE 
          WHEN DATEDIFF(date(now())-1, data_vencimento) >= 1 
               AND (DATEDIFF(date(now())-1, data_vencimento)) <= 5 
          THEN 'A- 1~5' 
          WHEN DATEDIFF(date(now())-1, data_vencimento) >= 6 
               AND (DATEDIFF(date(now())-1, data_vencimento)) <= 15 
          THEN 'B- 6~15' 
          WHEN DATEDIFF(date(now())-1, data_vencimento) >= 16 
               AND (DATEDIFF(date(now())-1, data_vencimento)) <= 40 
          THEN 'C- 16~40' 
          WHEN DATEDIFF(date(now())-1, data_vencimento) >= 41 
               AND (DATEDIFF(date(now())-1, data_vencimento)) <= 90 
          THEN 'D- 41~90' 
          WHEN DATEDIFF(date(now())-1, data_vencimento) > 90 
          THEN 'E- >90' 
          ELSE 'NULL' 
       END 
          AS 'Faixa de atraso', 
     SUM( 
             CASE 
                WHEN ((data_pagamento > date(now())-1) 
               OR data_pagamento IS NULL 
               OR baixados = 'NÃO') 
                THEN valor_operacao 
                ELSE 0 
             END) AS 'Saldo', 
        SUM( 
             CASE 
                WHEN (data_pagamento =date(now())-1 AND parcelado = 0) 
                THEN valor_operacao 
                ELSE 0 
             END)AS 'Pagamentos', 
           SUM( 
             CASE 
                WHEN (data_pagamento =date(now())-1 AND parcelado = 1) 
                THEN valor_operacao ELSE 0 
             END) AS 'Parcelado', 
       SUM((ant.Saldo_Anterior)) AS 'Saldo Anterior', 
           
       
            SUM( 
               CASE 
                  WHEN (data_pagamento >date(now())-1 
                        OR baixados = 'NÃO') 
                  THEN valor_operacao 
                  ELSE 0 
               END) 
          - Sum(ant.Saldo_Anterior) 
          + SUM( 
               CASE 
                  WHEN (data_pagamento = date(now())-1) 
                  THEN 
                     valor_operacao 
                  ELSE 
                     0 
               END) AS 'Rolagem' 
           
 FROM tb_relatorio_transacao_diario 
  
 LEFT JOIN ( 
   SELECT idt_operacao, 
         SUM( CASE WHEN (data_pagamento >date(now())-2) 
                 OR data_pagamento IS NULL 
                 OR baixados = 'NÃO' 
                  THEN valor_operacao 
                  ELSE 0 
               END) 
            AS 'Saldo_Anterior' 
   FROM tb_relatorio_transacao_diario 
    
   WHERE repasse_bloqueado = 'NãO' 
         AND data_vencimento <= date(now())-2 
         AND produto = 'SPOT' 
         AND data_cancelamento IS NULL 
         AND DATEDIFF(date(now())-2,data_vencimento) > 0 
  GROUP BY idt_operacao) ant 
  ON ant.idt_operacao = tb_relatorio_transacao_diario.idt_operacao 
          
       
 WHERE repasse_bloqueado = 'NãO' 
       AND data_vencimento <= date(now())-1 
       AND produto = 'SPOT' 
       AND data_cancelamento IS NULL 
       AND DATEDIFF(date(now())-1,data_vencimento) > 0 
        
GROUP BY 
(CASE 
          WHEN DATEDIFF(date(now())-1, data_vencimento) >= 1 
               AND (DATEDIFF(date(now())-1, data_vencimento)) <= 5 
          THEN 'a1~5' 
          WHEN DATEDIFF(date(now())-1, data_vencimento) >= 6 
               AND (DATEDIFF(date(now())-1, data_vencimento)) <= 15 
          THEN 'b6~15' 
          WHEN DATEDIFF(date(now())-1, data_vencimento) >= 16 
               AND (DATEDIFF(date(now())-1, data_vencimento)) <= 40 
          THEN 'c16~40' 
          WHEN DATEDIFF(date(now())-1, data_vencimento) >= 41 
               AND (DATEDIFF(date(now())-1, data_vencimento)) <= 90 
          THEN 'd41~90' 
          WHEN DATEDIFF(date(now())-1, data_vencimento) > 90 
          THEN 'e>90' 
          ELSE 'NULL' 
       END)
       
       union all
       
SELECT 'parcelado' as tipo 
,(date(now())-0) as data_log,
  date(now())-1 AS 'Data Referencia', 
       CASE 
          WHEN DATEDIFF(date(now())-1, data_vencimento) >= 1 
               AND (DATEDIFF(date(now())-1, data_vencimento)) <= 5 
          THEN 'A- 1~5' 
          WHEN DATEDIFF(date(now())-1, data_vencimento) >= 6 
               AND (DATEDIFF(date(now())-1, data_vencimento)) <= 15 
          THEN 'B- 6~15' 
          WHEN DATEDIFF(date(now())-1, data_vencimento) >= 16 
               AND (DATEDIFF(date(now())-1, data_vencimento)) <= 40 
          THEN 'C- 16~40' 
          WHEN DATEDIFF(date(now())-1, data_vencimento) >= 41 
               AND (DATEDIFF(date(now())-1, data_vencimento)) <= 90 
          THEN 'D- 41~90' 
          WHEN DATEDIFF(date(now())-1, data_vencimento) > 90 
          THEN 'E- >90' 
          ELSE 'NULL' 
       END 
          AS 'Faixa de atraso', 
       SUM( 
             CASE 
                WHEN ( (data_pagamento > date(now())-1) 
               OR data_pagamento IS NULL 
               OR baixados = 'NÃO') 
                THEN valor_operacao 
                ELSE 0 
             END) AS 'Saldo', 
        SUM( 
             CASE 
                WHEN (data_pagamento = date(now())-1 AND parcelado = 0) 
                THEN valor_operacao 
                ELSE 0 
             END)AS 'Pagamentos', 
           SUM( 
             CASE 
                WHEN (data_pagamento =date(now())-1 AND parcelado = 1) 
                THEN valor_operacao ELSE 0 
             END) AS 'Parcelado', 
       SUM((ant.Saldo_Anterior)) AS 'Saldo Anterior', 
           
   
            SUM( 
               CASE 
                  WHEN (data_pagamento >date(now())-1 
                        OR baixados = 'NÃO') 
                  THEN valor_operacao 
                  ELSE 0 
               END) 
          - Sum(ant.Saldo_Anterior) 
          + SUM( 
               CASE 
                  WHEN (data_pagamento = date(now())-1) 
                  THEN 
                     valor_operacao 
                  ELSE 
                     0 
               END) AS 'Rolagem' 
           
 FROM tb_relatorio_transacao_diario 
  
 LEFT JOIN ( 
   SELECT idt_operacao, 
         SUM( CASE WHEN (data_pagamento >date(now())-2) 
                 OR data_pagamento IS NULL 
                 OR baixados = 'NÃO' 
                  THEN valor_operacao 
                  ELSE 0 
               END) 
            AS 'Saldo_Anterior' 
   FROM tb_relatorio_transacao_diario 
    
   WHERE repasse_bloqueado = 'NãO' 
         AND data_vencimento <= date(now())-2 
         AND produto = 'SPOT' 
         AND data_cancelamento IS NULL 
         AND DATEDIFF(date(now())-2,data_vencimento) > 0 
  GROUP BY idt_operacao) ant 
  ON ant.idt_operacao = tb_relatorio_transacao_diario.idt_operacao 
          
       
 WHERE repasse_bloqueado = 'NãO' 
       AND data_vencimento <= date(now())-1 
       AND produto <> 'SPOT' 
       AND data_cancelamento IS NULL 
       AND DATEDIFF(date(now())-1,data_vencimento) > 0 
        
GROUP BY 
(CASE 
          WHEN DATEDIFF(date(now())-1, data_vencimento) >= 1 
               AND (DATEDIFF(date(now())-1, data_vencimento)) <= 5 
          THEN 'a1~5' 
          WHEN DATEDIFF(date(now())-1, data_vencimento) >= 6 
               AND (DATEDIFF(date(now())-1, data_vencimento)) <= 15 
          THEN 'b6~15' 
          WHEN DATEDIFF(date(now())-1, data_vencimento) >= 16 
               AND (DATEDIFF(date(now())-1, data_vencimento)) <= 40 
          THEN 'c16~40' 
          WHEN DATEDIFF(date(now())-1, data_vencimento) >= 41 
               AND (DATEDIFF(date(now())-1, data_vencimento)) <= 90 
          THEN 'd41~90' 
          WHEN DATEDIFF(date(now())-1, data_vencimento) > 90 
          THEN 'e>90' 
          WHEN DATEDIFF(date(now())-1, data_vencimento) >= 90 
          THEN 'f>90' 
          ELSE 'NULL' 
       END);

Compartilhar este post


Link para o post
Compartilhar em outros sites
não gera a informação desejada

O que ocorre de errado ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Motta, na verdade, não gera erro.

Mas dia 1º, processou e, não trouxe nenhuma informação e, acabou afetando alguns dados do dia 02/10/2016 também.

Consigo encaminhar algum print nesse fórum?

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não , tem de publicar a imagem em algum lugar e criar o link aqui.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Motta, na verdade, ocorre que, ao virar o mês, o script não traz os dados para o último e penúltimo dias em do mês anterior ao regente e, como dados do dia anterior (d-1) são utilizados no dia atual, alguns campos do 2º dia do mês regente vêm como null ou zerado (o que não está correto nesse meu caso).

Repare abaixo que, dados do dia 01/10/2016 nem aparecem e, o dia 02/10/2016 fica com dados comprometidos, pela falta desses dados do dia 01

Retorno:

tipo data_log data_referencia faixa_atraso saldo pagamentos parcelado saldo_anterior rolagem

spot 29/09/2016 00:00 28/09/2016 00:00 A- 1~5 8885,51 144,7 834,95 7387,86 2477,3

spot 29/09/2016 00:00 28/09/2016 00:00 B- 6~15 14330,85 411,95 0 0 15028,36 -285,56

spot 29/09/2016 00:00 28/09/2016 00:00 C- 16~40 31718,75 353,37 0 0 32357,68 -285,56

spot 29/09/2016 00:00 28/09/2016 00:00 D- 41~90 32203,08 0 0 0 32916,98 -713,9

spot 29/09/2016 00:00 28/09/2016 00:00 E- >90 1239628,92 394,72 0 0 1240023,64 0

parcelado 29/09/2016 00:00 28/09/2016 00:00 A- 1~5 558,15 61,24 0 0 115,97 503,42

parcelado 29/09/2016 00:00 28/09/2016 00:00 B- 6~15 582,27 177,31 0 0 428,34 331,24

parcelado 29/09/2016 00:00 28/09/2016 00:00 C- 16~40 1827,68 177,31 0 0 428,34 1576,65

parcelado 29/09/2016 00:00 28/09/2016 00:00 D- 41~90 4821,03 177,31 0 0 428,34 4570

parcelado 29/09/2016 00:00 28/09/2016 00:00 E- >90 25462,1 107,3 0 0 25280,73 null

spot 30/09/2016 00:00 29/09/2016 00:00 A- 1~5 10362,93 343,77 119,98 8753,46 2073,22

spot 30/09/2016 00:00 29/09/2016 00:00 B- 6~15 13630,11 356,12 0 0 14271,79 -285,56

spot 30/09/2016 00:00 29/09/2016 00:00 C- 16~40 32075,82 0 0 0 32075,82 0

spot 30/09/2016 00:00 29/09/2016 00:00 D- 41~90 32847,92 31,98 0 0 33879,36 -999,46

spot 30/09/2016 00:00 29/09/2016 00:00 E- >90 1238067,7 524,67 0 0 1238592,37 0

parcelado 30/09/2016 00:00 29/09/2016 00:00 A- 1~5 326,13 85,14 0 0 411,27

parcelado 30/09/2016 00:00 29/09/2016 00:00 B- 6~15 729,15 0 0 0 428,34 300,81

parcelado 30/09/2016 00:00 29/09/2016 00:00 C- 16~40 1827,68 0 0 0 1827,68

parcelado 30/09/2016 00:00 29/09/2016 00:00 D- 41~90 4821,03 0 0 0 856,68 3964,35

parcelado 30/09/2016 00:00 29/09/2016 00:00 E- >90 25462,1 0 0 0 25173,43

spot 02/10/2016 00:00 01/10/2016 00:00 A- 1~5 17633,77 0 0 0 null null

spot 02/10/2016 00:00 01/10/2016 00:00 B- 6~15 11715,46 0 0 0 null null

spot 02/10/2016 00:00 01/10/2016 00:00 C- 16~40 33990,47 0 0 0 null null

spot 02/10/2016 00:00 01/10/2016 00:00 D- 41~90 32258 0 0 0 null null

spot 02/10/2016 00:00 01/10/2016 00:00 E- >90 1238781,42 0 0 0 null null

parcelado 02/10/2016 00:00 01/10/2016 00:00 A- 1~5 739,02 0 0 0 null null

parcelado 02/10/2016 00:00 01/10/2016 00:00 B- 6~15 729,15 0 0 0 null null

parcelado 02/10/2016 00:00 01/10/2016 00:00 C- 16~40 1827,68 0 0 0 null null

parcelado 02/10/2016 00:00 01/10/2016 00:00 D- 41~90 4821,83 0 0 0 null null

parcelado 02/10/2016 00:00 01/10/2016 00:00 E- >90 25595,48 0 0 0 null null

spot 03/10/2016 00:00 02/10/2016 00:00 A- 1~5 9705,12 0 0 0 9705,12 0

spot 03/10/2016 00:00 02/10/2016 00:00 B- 6~15 15566,76 0 0 0 15852,32 -285,56

spot 03/10/2016 00:00 02/10/2016 00:00 C- 16~40 32805,81 0 0 0 32805,81 0

spot 03/10/2016 00:00 02/10/2016 00:00 D- 41~90 34345,72 0 0 0 35345,18 -999,46

spot 03/10/2016 00:00 02/10/2016 00:00 E- >90 1238772,74 0 0 0 1238772,74 0

parcelado 03/10/2016 00:00 02/10/2016 00:00 A- 1~5 557,23 0 0 0 557,23 null

parcelado 03/10/2016 00:00 02/10/2016 00:00 B- 6~15 834,6 0 0 0 428,34 406,26

parcelado 03/10/2016 00:00 02/10/2016 00:00 C- 16~40 1564,95 0 0 0 1564,95 null

parcelado 03/10/2016 00:00 02/10/2016 00:00 D- 41~90 5018,22 0 0 0 980,48 3970,65

parcelado 03/10/2016 00:00 02/10/2016 00:00 E- >90 25595,48 0 0 0 123,8 25115,92

Compartilhar este post


Link para o post
Compartilhar em outros sites

A melhor forma de corrigir um SQL deste tamanho é executar suas partes de forma separada , do jeito que está é quase impossível achar o problema.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Certo.

Na verdade, esse script veio de uma outra área e não sei de fato quem desenvolveu, só tenho certeza que não foi a pessoa solicitante, mas enfim, caiu pra mim.

Hoje esse script funciona, mas não têm nenhuma regra para virada do mês e, essa regra em primeiro lugar, que não estou sabendo criar.

Em segundo lugar, deveria ter uma tratativa para cada mês específico, pois hora terei 30 dias, hora 31, hora 29 (ano bissexto), hora 28 dias...essa também não estou sabendo.

Se puder dar um norte ou algum link, já ajuda demais.

Abs e obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quando falo virada do mês quero dizer o seguinte:

pega a data de hoje, por exemplo e a de ontem...então será nesse exemplo dias 21/10 e 20/10..ai vai até dia 31/10 e 30/10..quando entrar em novembro, pega dia 01/11 e "não traz" 31/10...só traz o dia 01/11, ou seja, ele isola mês a mês, porém, no mês retrasado (agosto) que tivemos 31 dias..ele entendeu que tinha 30 dias mesmo..então ele está separando mês a mês mas mantendo sempre 30 dias para cada mês..

Espero que tenha sido claro e não confuso.

Abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Data Referencia

Faixa de atraso

Saldo

Pagamentos

Parcelado

Saldo Anterior

Rolagem

2016-10-20 21:01:06

A- 1~5

10.858,11

0,00

0,00

10.817,00

41,11

2016-10-20 21:01:06

B- 6~15

21.591,64

0,00

0,00

21.478,00

113,64

2016-10-20 21:01:06

C- 16~40

37.307,68

0,00

0,00

37.391,00

-83,32

2016-10-20 21:01:06

D- 41~90

39.868,42

0,00

0,00

39.916,00

-47,58

2016-10-20 21:01:06

E- >90

1.246.207,38

0,00

0,00

1.240.743,00

5.464,38

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.