Ir para conteúdo
Fórum Script Brasil

ricardo.bezerra

Membros
  • Total de itens

    30
  • Registro em

  • Última visita

Sobre ricardo.bezerra

ricardo.bezerra's Achievements

0

Reputação

  1. 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.
  2. não estava com distinct, agora retorna assim: # LocatarioFiador1;00;00;1 Mas na query completa, não apenas na sub-query dá critica, dizendo que tem mais de um retorno, obviamente porque está retornando 4 linhas..
  3. Isso traz o que preciso: SELECT CONCAT(CAST(lello_locatario AS CHAR),';',CAST(lello_fiador AS CHAR)) Locatario_Fiador FROM lel_relatorio Locatario_FiadorLocatario_Fiador 0;0 0;0 0;0 0;0 1;0 0;1 0;0Mas seu coloco na query...ai critica que gera mais de uma linha: SELECT lel_relatorio.id IdRelatorio ,CAST(lel_relatorio.data_inclusao AS DATETIME) DataConsulta ,lel_lello_analise.id_lello_analise IdAnalise ,lel_relatorio.id_pessoa_score IdPessoaScore ,lel_lello_analise.id_recomendacao IdRecomendacao ,(SELECT CONCAT(CAST(lello_locatario AS CHAR),';',CAST(lello_fiador AS CHAR)) Locatario_Fiador FROM lel_relatorio) Locatario_Fiador FROM pla_faturamento pla_faturamento LEFT JOIN lel_relatorio lel_relatorio ON lel_relatorio.id_empresa = pla_faturamento.id_empresa LEFT JOIN lel_lello_analise lel_lello_analise ON lel_lello_analise.id_empresa = lel_relatorio.id_empresa WHERE pla_faturamento.id_empresa = 7 AND CAST(lel_relatorio.data_inclusao AS DATETIME) IS NOT NULL AND lel_relatorio.id >= (SELECT (MAX(id) * 0.999) FROM lel_relatorio) GROUP BY lel_relatorio.lello_locatario ORDER BY lel_relatorio.data_inclusao15:34:38 SELECT lel_relatorio.id IdRelatorio ,CAST(lel_relatorio.data_inclusao AS DATETIME) DataConsulta ,lel_lello_analise.id_lello_analise IdAnalise ,lel_relatorio.id_pessoa_score IdPessoaScore ,lel_lello_analise.id_recomendacao IdRecomendacao ,(SELECT CONCAT(CAST(lello_locatario AS CHAR),';',CAST(lello_fiador AS CHAR)) Locatario_Fiador FROM lel_relatorio) Locatario_Fiador FROM pla_faturamento pla_faturamento LEFT JOIN lel_relatorio lel_relatorio ON lel_relatorio.id_empresa = pla_faturamento.id_empresa LEFT JOIN lel_lello_analise lel_lello_analise ON lel_lello_analise.id_empresa = lel_relatorio.id_empresa WHERE pla_faturamento.id_empresa = 7 AND CAST(lel_relatorio.data_inclusao AS DATETIME) IS NOT NULL AND lel_relatorio.id >= (SELECT (MAX(id) * 0.999) FROM lel_relatorio) GROUP BY lel_relatorio.lello_locatario ORDER BY lel_relatorio.data_inclusao LIMIT 0, 50000 Error Code: 1242. Subquery returns more than 1 row 5.148 sec
  4. tirar os joins e usar o where ajuda em alguma coisa?
  5. Por favor, precisava de um norte...não entendo como a querie funciona bem sem período de consulta e incluindo um único dia descamba.
  6. Olá, a querie abaixo, funciona perfeita e rápida, porém, ao inserir os últimos "AND" com o período...ela trava, alguém pode dar dicas do porque e, como solucionar? Obrigado desde já. Últimos "AND": AND rel.data_inclusao BETWEEN '2015-15-04 00:00:00' AND '2015-15-04 23:59:59' Querie: SELECT rel.id_relatorio ,rel.id_relatorio_retorno ,rel.data_inclusao AS dt_inc ,rel.documento ,caixa.texto AS id_filial ,filiais.loja ,caixa.valor AS caixa ,caixa.ativo AS ativo ,renda.renda_presumida AS renda ,score.valor_score AS valor_score ,pessoa.idade AS idade ,pessoa.situacao AS situacao ,msg.mensagem AS mensagem ,backoffice.valor AS bckoffice ,resultado.valor AS resutlado ,CASE WHEN backoffice.valor IS NULL THEN CASE WHEN rel.id_relatorio_retorno IS NULL THEN 'PDV-REUSO' ELSE 'PDV' END ELSE 'ATENDIMENTO' END FROM dec_relatorio rel INNER JOIN pla_parametros caixa ON rel.id_relatorio = caixa.id_relatorio INNER JOIN pla_carrefour_filiais filiais ON caixa.texto = filiais.cod_sitef LEFT JOIN pla_mensagem as msg ON rel.id_relatorio = msg.id_relatorio and msg.id_empresa = 19 LEFT JOIN pla_pessoa_cadastro as pessoa ON rel.id_relatorio = pessoa.id_relatorio LEFT JOIN pla_score as score ON rel.id_pessoa_score = score.id_score LEFT JOIN pla_renda_presumida_analise AS renda ON rel.id_renda_presumida_analise = renda.id_renda_presumida_analise AND renda.id_empresa = 19 LEFT OUTER JOIN pla_parametros backoffice ON rel.id_relatorio = backoffice.id_relatorio AND backoffice.tipo = 'BACKOFFICE' AND backoffice.id_empresa = 19 LEFT OUTER JOIN pla_parametros resultado ON rel.id_relatorio = resultado.id_relatorio AND resultado.tipo = 'RESULTADO' AND backoffice.id_empresa = 19 WHERE 1 = 1 AND caixa.tipo = 'CAIXA' AND rel.id_empresa = 19 AND caixa.id_empresa = 19 AND caixa.ativo = 1 AND rel.data_inclusao BETWEEN '2015-15-04 00:00:00' AND '2015-15-04 23:59:59'
  7. Ficou mais ou menos assim, mas falta a condição no IF que não sei como fazer e não acho nada pra dar uma idéia: CREATE PROCEDURE `sp_parametros`() BEGIN IF [falta aquio update não funciona]????UPDATE test.Teste [falta aqui o update não funciona]???? THEN INSERT INTO test.BACKOFFICE (tipo_backoffice) SELECT tipo_teste FROM test.Teste WHERE tipo_teste IN('BACKOFFICE'); INSERT INTO test.Monitoramento (tipo_monitoramento) SELECT tipo_teste FROM test.Teste WHERE tipo_teste IN('SCPC_END_DATE','SCPC_INIT_DATE','RENDA_END_DATE','RENDA_INIT_DATE', 'SCORE_END_DATE','SCORE_INIT_DATE','CHEQUE_END_DATE','CHEQUE_INIT_DATE', 'INIT_DATE','END_DATE'); INSERT INTO test.PDV (tipo_pdv) SELECT tipo_teste FROM test.Teste WHERE tipo_Teste IN('CAIXA','OPERADOR','RESULTADO'); END;
  8. Denis, o correto seria eu criar uma trigger pra chamar uma procedure que realize esse procedimento então?
  9. <script type='text/javascript'>window.mod_pagespeed_start = Number(new Date());</script> Outra coisa, o restante do comando está correto?
  10. Muito obrigado pelo retorno. Mas então não teria como schedular a trigger? Abs.
  11. Pessoal, na verdade coloquei update por ser exemplo, essa trigger teria que funcionar a cada duas horas automaticamente, por isso tentei a schedule, sepuderem ajudar também com o que preciso colocar na parte: Before... Obrigado. Abraços.
  12. O resultado final seria esse, mas não funciona..tá errada...verifiquei e encontrei o que vai na linha 2... CREATE TRIGGER Parametros BEFORE UPDATE ON pla_parametros FOR EACH ROW BEGIN INSERT INTO test.BACKOFFICE (tipo_backoffice) SELECT tipo_teste FROM test.Teste WHERE tipo_teste = 'BACKOFFICE'; INSERT INTO test.Monitoramento (tipo_monitoramento) SELECT tipo_teste FROM test.Teste WHERE tipo_teste IN('SCPC_END_DATE','SCPC_INIT_DATE','RENDA_END_DATE','RENDA_INIT_DATE','SCORE_END_DATE','SCORE_INIT_DATE','CHEQUE_END_DATE','CHEQUE_INIT_DATE','INIT_DATE', 'END_DATE'); INSERT INTO test.PDV (tipo_pdv) SELECT tipo_teste FROM test.Teste WHERE tipo_teste IN('CAIXA','OPERADOR','RESULTADO'); END
×
×
  • Criar Novo...