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:
SET @dataI = now();
SET @dataA = now()-1;
-- Esta primeira query extrai os dados referente a SPOT
SELECT
@dataI AS 'Data Referencia',
CASE
WHEN DATEDIFF(@dataI, data_vencimento) >= 1
AND (DATEDIFF(@dataI, data_vencimento)) <= 5
THEN 'A- 1~5'
WHEN DATEDIFF(@dataI, data_vencimento) >= 6
AND (DATEDIFF(@dataI, data_vencimento)) <= 15
THEN 'B- 6~15'
WHEN DATEDIFF(@dataI, data_vencimento) >= 16
AND (DATEDIFF(@dataI, data_vencimento)) <= 40
THEN 'C- 16~40'
WHEN DATEDIFF(@dataI, data_vencimento) >= 41
AND (DATEDIFF(@dataI, data_vencimento)) <= 90
THEN 'D- 41~90'
WHEN DATEDIFF(@dataI, data_vencimento) > 90
THEN 'E- >90'
ELSE 'NULL'
END
AS 'Faixa de atraso',
FORMAT( SUM(
CASE
WHEN ( (data_pagamento > @dataI)
OR data_pagamento IS NULL
OR baixados = 'NÃO')
THEN valor_operacao
ELSE 0
END),
2, 'de_DE') AS 'Saldo',
FORMAT( SUM(
CASE
WHEN (data_pagamento =@dataI AND parcelado = 0)
THEN valor_operacao
ELSE 0
END),
2,'de_DE')AS 'Pagamentos',
FORMAT( SUM(
CASE
WHEN (data_pagamento =@dataI AND parcelado = 1)
THEN valor_operacao ELSE 0
END),
2, 'de_DE') AS 'Parcelado',
FORMAT(SUM(ant.Saldo_Anterior),2,'de_DE') AS 'Saldo Anterior',
FORMAT(
SUM(
CASE
WHEN (data_pagamento >@dataI
OR baixados = 'NÃO')
THEN valor_operacao
ELSE 0
END)
- Sum(ant.Saldo_Anterior)
+ SUM(
CASE
WHEN (data_pagamento = @dataI)
THEN
valor_operacao
ELSE
0
END),
2, 'de_DE') AS 'Rolagem'
FROM tb_relatorio_transacao_diario
LEFT JOIN (
SELECT idt_operacao,
FORMAT( SUM( CASE WHEN (data_pagamento >@dataA)
OR data_pagamento IS NULL
OR baixados = 'NÃO'
THEN valor_operacao
ELSE 0
END), 2, 'de_DE')
AS 'Saldo_Anterior'
FROM tb_relatorio_transacao_diario
WHERE repasse_bloqueado = 'NãO'
AND data_vencimento <= @dataA
AND produto = 'SPOT'
AND data_cancelamento IS NULL
AND DATEDIFF(@dataA,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 <= @dataI
AND produto = 'SPOT'
AND data_cancelamento IS NULL
AND DATEDIFF(@dataI,data_vencimento) > 0
GROUP BY
(CASE
WHEN DATEDIFF(@dataI, data_vencimento) >= 1
AND (DATEDIFF(@dataI, data_vencimento)) <= 5
THEN 'a1~5'
WHEN DATEDIFF(@dataI, data_vencimento) >= 6
AND (DATEDIFF(@dataI, data_vencimento)) <= 15
THEN 'b6~15'
WHEN DATEDIFF(@dataI, data_vencimento) >= 16
AND (DATEDIFF(@dataI, data_vencimento)) <= 40
THEN 'c16~40'
WHEN DATEDIFF(@dataI, data_vencimento) >= 41
AND (DATEDIFF(@dataI, data_vencimento)) <= 90
THEN 'd41~90'
WHEN DATEDIFF(@dataI, data_vencimento) > 90
THEN 'e>90'
ELSE 'NULL'
END);
-- Esta segunda query retorna dados dos parcelados
SELECT
@dataI AS 'Data Referencia',
CASE
WHEN DATEDIFF(@dataI, data_vencimento) >= 1
AND (DATEDIFF(@dataI, data_vencimento)) <= 5
THEN 'A- 1~5'
WHEN DATEDIFF(@dataI, data_vencimento) >= 6
AND (DATEDIFF(@dataI, data_vencimento)) <= 15
THEN 'B- 6~15'
WHEN DATEDIFF(@dataI, data_vencimento) >= 16
AND (DATEDIFF(@dataI, data_vencimento)) <= 40
THEN 'C- 16~40'
WHEN DATEDIFF(@dataI, data_vencimento) >= 41
AND (DATEDIFF(@dataI, data_vencimento)) <= 90
THEN 'D- 41~90'
WHEN DATEDIFF(@dataI, data_vencimento) > 90
THEN 'E- >90'
ELSE 'NULL'
END
AS 'Faixa de atraso',
FORMAT( SUM(
CASE
WHEN ( (data_pagamento > @dataI)
OR data_pagamento IS NULL
OR baixados = 'NÃO')
THEN valor_operacao
ELSE 0
END),
2, 'de_DE') AS 'Saldo',
FORMAT( SUM(
CASE
WHEN (data_pagamento = @dataI AND parcelado = 0)
THEN valor_operacao
ELSE 0
END),
2,'de_DE')AS 'Pagamentos',
FORMAT( SUM(
CASE
WHEN (data_pagamento =@dataI AND parcelado = 1)
THEN valor_operacao ELSE 0
END),
2, 'de_DE') AS 'Parcelado',
FORMAT(SUM(ant.Saldo_Anterior),2,'de_DE') AS 'Saldo Anterior',
FORMAT(
SUM(
CASE
WHEN (data_pagamento >@dataI
OR baixados = 'NÃO')
THEN valor_operacao
ELSE 0
END)
- Sum(ant.Saldo_Anterior)
+ SUM(
CASE
WHEN (data_pagamento = @dataI)
THEN
valor_operacao
ELSE
0
END),
2, 'de_DE') AS 'Rolagem'
FROM tb_relatorio_transacao_diario
LEFT JOIN (
SELECT idt_operacao,
FORMAT( SUM( CASE WHEN (data_pagamento >@dataA)
OR data_pagamento IS NULL
OR baixados = 'NÃO'
THEN valor_operacao
ELSE 0
END), 2, 'de_DE')
AS 'Saldo_Anterior'
FROM tb_relatorio_transacao_diario
WHERE repasse_bloqueado = 'NãO'
AND data_vencimento <= @dataA
AND produto = 'SPOT'
AND data_cancelamento IS NULL
AND DATEDIFF(@dataA,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 <= @dataI
AND produto <> 'SPOT'
AND data_cancelamento IS NULL
AND DATEDIFF(@dataI,data_vencimento) > 0
GROUP BY
(CASE
WHEN DATEDIFF(@dataI, data_vencimento) >= 1
AND (DATEDIFF(@dataI, data_vencimento)) <= 5
THEN 'a1~5'
WHEN DATEDIFF(@dataI, data_vencimento) >= 6
AND (DATEDIFF(@dataI, data_vencimento)) <= 15
THEN 'b6~15'
WHEN DATEDIFF(@dataI, data_vencimento) >= 16
AND (DATEDIFF(@dataI, data_vencimento)) <= 40
THEN 'c16~40'
WHEN DATEDIFF(@dataI, data_vencimento) >= 41
AND (DATEDIFF(@dataI, data_vencimento)) <= 90
THEN 'd41~90'
WHEN DATEDIFF(@dataI, data_vencimento) > 90
THEN 'e>90'
WHEN DATEDIFF(@dataI, data_vencimento) >= 90
THEN 'f>90'
ELSE 'NULL'
END);
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..
Ou seja, também não está rolando identificação se o mês têm 31, 30, 29 (ano bissexto) ou 28 dias.
Se alguém puder dar uma direção ou souber de algum link que possa ajudar-me, já agradeço demais.
Pergunta
ricardo.bezerra
Bom dia!
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:
SET @dataI = now(); SET @dataA = now()-1; -- Esta primeira query extrai os dados referente a SPOT SELECT @dataI AS 'Data Referencia', CASE WHEN DATEDIFF(@dataI, data_vencimento) >= 1 AND (DATEDIFF(@dataI, data_vencimento)) <= 5 THEN 'A- 1~5' WHEN DATEDIFF(@dataI, data_vencimento) >= 6 AND (DATEDIFF(@dataI, data_vencimento)) <= 15 THEN 'B- 6~15' WHEN DATEDIFF(@dataI, data_vencimento) >= 16 AND (DATEDIFF(@dataI, data_vencimento)) <= 40 THEN 'C- 16~40' WHEN DATEDIFF(@dataI, data_vencimento) >= 41 AND (DATEDIFF(@dataI, data_vencimento)) <= 90 THEN 'D- 41~90' WHEN DATEDIFF(@dataI, data_vencimento) > 90 THEN 'E- >90' ELSE 'NULL' END AS 'Faixa de atraso', FORMAT( SUM( CASE WHEN ( (data_pagamento > @dataI) OR data_pagamento IS NULL OR baixados = 'NÃO') THEN valor_operacao ELSE 0 END), 2, 'de_DE') AS 'Saldo', FORMAT( SUM( CASE WHEN (data_pagamento =@dataI AND parcelado = 0) THEN valor_operacao ELSE 0 END), 2,'de_DE')AS 'Pagamentos', FORMAT( SUM( CASE WHEN (data_pagamento =@dataI AND parcelado = 1) THEN valor_operacao ELSE 0 END), 2, 'de_DE') AS 'Parcelado', FORMAT(SUM(ant.Saldo_Anterior),2,'de_DE') AS 'Saldo Anterior', FORMAT( SUM( CASE WHEN (data_pagamento >@dataI OR baixados = 'NÃO') THEN valor_operacao ELSE 0 END) - Sum(ant.Saldo_Anterior) + SUM( CASE WHEN (data_pagamento = @dataI) THEN valor_operacao ELSE 0 END), 2, 'de_DE') AS 'Rolagem' FROM tb_relatorio_transacao_diario LEFT JOIN ( SELECT idt_operacao, FORMAT( SUM( CASE WHEN (data_pagamento >@dataA) OR data_pagamento IS NULL OR baixados = 'NÃO' THEN valor_operacao ELSE 0 END), 2, 'de_DE') AS 'Saldo_Anterior' FROM tb_relatorio_transacao_diario WHERE repasse_bloqueado = 'NãO' AND data_vencimento <= @dataA AND produto = 'SPOT' AND data_cancelamento IS NULL AND DATEDIFF(@dataA,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 <= @dataI AND produto = 'SPOT' AND data_cancelamento IS NULL AND DATEDIFF(@dataI,data_vencimento) > 0 GROUP BY (CASE WHEN DATEDIFF(@dataI, data_vencimento) >= 1 AND (DATEDIFF(@dataI, data_vencimento)) <= 5 THEN 'a1~5' WHEN DATEDIFF(@dataI, data_vencimento) >= 6 AND (DATEDIFF(@dataI, data_vencimento)) <= 15 THEN 'b6~15' WHEN DATEDIFF(@dataI, data_vencimento) >= 16 AND (DATEDIFF(@dataI, data_vencimento)) <= 40 THEN 'c16~40' WHEN DATEDIFF(@dataI, data_vencimento) >= 41 AND (DATEDIFF(@dataI, data_vencimento)) <= 90 THEN 'd41~90' WHEN DATEDIFF(@dataI, data_vencimento) > 90 THEN 'e>90' ELSE 'NULL' END); -- Esta segunda query retorna dados dos parcelados SELECT @dataI AS 'Data Referencia', CASE WHEN DATEDIFF(@dataI, data_vencimento) >= 1 AND (DATEDIFF(@dataI, data_vencimento)) <= 5 THEN 'A- 1~5' WHEN DATEDIFF(@dataI, data_vencimento) >= 6 AND (DATEDIFF(@dataI, data_vencimento)) <= 15 THEN 'B- 6~15' WHEN DATEDIFF(@dataI, data_vencimento) >= 16 AND (DATEDIFF(@dataI, data_vencimento)) <= 40 THEN 'C- 16~40' WHEN DATEDIFF(@dataI, data_vencimento) >= 41 AND (DATEDIFF(@dataI, data_vencimento)) <= 90 THEN 'D- 41~90' WHEN DATEDIFF(@dataI, data_vencimento) > 90 THEN 'E- >90' ELSE 'NULL' END AS 'Faixa de atraso', FORMAT( SUM( CASE WHEN ( (data_pagamento > @dataI) OR data_pagamento IS NULL OR baixados = 'NÃO') THEN valor_operacao ELSE 0 END), 2, 'de_DE') AS 'Saldo', FORMAT( SUM( CASE WHEN (data_pagamento = @dataI AND parcelado = 0) THEN valor_operacao ELSE 0 END), 2,'de_DE')AS 'Pagamentos', FORMAT( SUM( CASE WHEN (data_pagamento =@dataI AND parcelado = 1) THEN valor_operacao ELSE 0 END), 2, 'de_DE') AS 'Parcelado', FORMAT(SUM(ant.Saldo_Anterior),2,'de_DE') AS 'Saldo Anterior', FORMAT( SUM( CASE WHEN (data_pagamento >@dataI OR baixados = 'NÃO') THEN valor_operacao ELSE 0 END) - Sum(ant.Saldo_Anterior) + SUM( CASE WHEN (data_pagamento = @dataI) THEN valor_operacao ELSE 0 END), 2, 'de_DE') AS 'Rolagem' FROM tb_relatorio_transacao_diario LEFT JOIN ( SELECT idt_operacao, FORMAT( SUM( CASE WHEN (data_pagamento >@dataA) OR data_pagamento IS NULL OR baixados = 'NÃO' THEN valor_operacao ELSE 0 END), 2, 'de_DE') AS 'Saldo_Anterior' FROM tb_relatorio_transacao_diario WHERE repasse_bloqueado = 'NãO' AND data_vencimento <= @dataA AND produto = 'SPOT' AND data_cancelamento IS NULL AND DATEDIFF(@dataA,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 <= @dataI AND produto <> 'SPOT' AND data_cancelamento IS NULL AND DATEDIFF(@dataI,data_vencimento) > 0 GROUP BY (CASE WHEN DATEDIFF(@dataI, data_vencimento) >= 1 AND (DATEDIFF(@dataI, data_vencimento)) <= 5 THEN 'a1~5' WHEN DATEDIFF(@dataI, data_vencimento) >= 6 AND (DATEDIFF(@dataI, data_vencimento)) <= 15 THEN 'b6~15' WHEN DATEDIFF(@dataI, data_vencimento) >= 16 AND (DATEDIFF(@dataI, data_vencimento)) <= 40 THEN 'c16~40' WHEN DATEDIFF(@dataI, data_vencimento) >= 41 AND (DATEDIFF(@dataI, data_vencimento)) <= 90 THEN 'd41~90' WHEN DATEDIFF(@dataI, data_vencimento) > 90 THEN 'e>90' WHEN DATEDIFF(@dataI, data_vencimento) >= 90 THEN 'f>90' ELSE 'NULL' END);
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..
Ou seja, também não está rolando identificação se o mês têm 31, 30, 29 (ano bissexto) ou 28 dias.
Se alguém puder dar uma direção ou souber de algum link que possa ajudar-me, já agradeço demais.
Muito obrigado.
Abraços
Ricardo.
Link para o comentário
Compartilhar em outros sites
1 resposta a esta questão
Posts Recomendados
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.