none
MINUTOS NEGATIVOS RRS feed

  • Pergunta

  •  Olá pessoal,

    Tenho uma tabela que faz o cálculo da diferença entre a hora de início e fim, em minutos. Nesse sentido, em algumas situações os minutos são negativos (ex: -61146236).

    Como faço para o SQL identificar essa situação negativa e transformar em zero "0"?

    segunda-feira, 19 de setembro de 2016 15:24

Todas as Respostas

  • Casos onde o tempo é negativo é porque a hora fim é inferior a hora de inicio. Pelo valo mostrado isso indica que voce nao esta considerando corretamente a dimensao dia. 

    Poderia nos mostrar qual é o conteudo de hora inicio e fim para um dos casos de minutos negativos?

    Att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    segunda-feira, 19 de setembro de 2016 15:53
  • Olá Armando,

    Você pode usar o CASE WHEN @H1 - @H2 < 0 THEN 0 ELSE @H1 - @H2 END

    Se for uma tabela de uso frequente, você pode criar um campo calculado, que te facilitará ainda mais a vida.

    • Sugerido como Resposta Zé Bill segunda-feira, 19 de setembro de 2016 15:58
    segunda-feira, 19 de setembro de 2016 15:58
  • Segue:

    HH_INICIO_ANALISE      HH_FIM_ANALISE      TEMPO_M
    17:45:44:0                     00:00:00:0               -61383945
    16:23:53:0                     00:00:00:0               -61383863

    segunda-feira, 19 de setembro de 2016 16:01
  • Já fiz o campo calculado:

    Segue:


    SUM(DATEDIFF(MINUTE,[dtInicioAtendimento], ([dtFimAtendimento]))) AS TEMPO_M,

    segunda-feira, 19 de setembro de 2016 16:03
  • Tente com CTE.

    WITH CTE

    AS ( SELECT campo1,

                campo2,

                campon,

                SUM(DATEDIFF(MINUTE,[dtInicioAtendimento], ([dtFimAtendimento]))) AS TEMPO_M

         FROM tabela...

         WHERE ...

            GROUP BY ... )

    SELECT campo1,

           campo2,

           campon,

           CASE WHEN TEMPO_M < 0 THEN 0 ELSE TEMPO_M END AS TEMPO_M

    FROM CTE

    • Sugerido como Resposta Zé Bill segunda-feira, 19 de setembro de 2016 16:18
    segunda-feira, 19 de setembro de 2016 16:17
  • Deleted
    segunda-feira, 19 de setembro de 2016 16:27
  • Zé mas como consigo inserir esse código nesse scritp?

    SELECT

    ISNULL(S.codSolicitacao,0) AS [S.A],

    ISNULL([codatendimento],0)               AS [ULTIMO_ATEND],

    S.dtSolicitacao                          AS [DATA_S.A],

    DATEPART (YEAR,[dtSolicitacao])          AS 'ANO_S.A',

    DATEPART (MONTH,[dtSolicitacao])         AS 'MÊS_S.A',


    (CASE

     

    WHEN STASA.codStatusSolicitacao = '1'    THEN 'NÃO ATENDIDA'

    WHEN STASA.codStatusSolicitacao = '2'    THEN 'EM ATENDIMENTO'

    WHEN STASA.codStatusSolicitacao = '3'    THEN 'PENDENTE DE FINALIZAÇÃO'

    WHEN STASA.codStatusSolicitacao = '4'    THEN 'EM REVISÃO'

    WHEN STASA.codStatusSolicitacao = '5'    THEN 'AGUARDANDO REVISAO'

    WHEN STASA.codStatusSolicitacao = '6'    THEN 'FINALIZADA' 

    WHEN STASA.codStatusSolicitacao = '7'    THEN 'CANCELADA'

    WHEN STASA.codStatusSolicitacao = '8'    THEN 'REANÁLISE'

    WHEN STASA.codStatusSolicitacao =  ''    THEN 'SEM INF'

            

    END) AS 'STATUS_DA_S.A',


    L.anoLote                   AS [ANO_LOTE],

    S.codLote                   AS [COD_LOTE],

    L.nroLote                   AS [Nº_LOTE],

    UPPER (SETO.nmSetor)        AS [NOME_SETOR],

    SETO.codExterno             AS [COD_EXT_SETOR],

    C.nmCliente                 AS [CONTRATANTE],

    ISNULL(PRAZO.diasPrazo, 5)  AS [SLA],

     

    (CASE

     

    WHEN SS.codServico = '35'

    THEN 'LOCALIZAÇÃO' END) AS [1ª_FASE],


    CON.descConclusao                      AS [CONCLUSÃO_1ª_FASE],

    UPPER (US.nmUsuarioSistema)            AS [ANALISTA_1ª_FASE],

     

    ISNULL([dtInicioAtendimento],0)        AS [DT_HH_INICIO_ANALISE],

    ISNULL([dtFimAtendimento],0)           AS [DT_HH_FIM_ANALISE],

     

    ISNULL(CONVERT (VARCHAR(10),[dtInicioAtendimento],103),'01/01/1900')    AS 'DT_INICIO_ANALISE',

    ISNULL(CONVERT (VARCHAR(10),[dtFimAtendimento],103),'01/01/1900')           AS 'DT_FIM_ANALISE',

    ISNULL(CONVERT (VARCHAR(10),[dtInicioAtendimento],114),'00:00:00:10')   AS 'HH_INICIO_ANALISE',

    ISNULL(CONVERT (VARCHAR(10),[dtFimAtendimento],114),'00:00:00:10')              AS 'HH_FIM_ANALISE',

     

    SUM(DATEDIFF(MINUTE,[dtInicioAtendimento], [dtFimAtendimento])) AS TEMPO_M,


    (CASE

     

    WHEN STASER.codStatusServico = '1'    THEN 'NÃO TRABALHADO'

    WHEN STASER.codStatusServico = '2'    THEN 'EM ATENDIMENTO'

    WHEN STASER.codStatusServico = '3'    THEN 'FINALIZADO' --- NA BASE ESSE STATUS ESTÁ DENOMINDADO "AGUARDANDO REVISAO". NESSE CASE O STATUS FOI ALTERADO DE FORMA PREPOSITAL. A ATIVIDADE DE LOCALIZAÇÃO NÃO POSSUI REVISOR. ----

    WHEN STASER.codStatusServico = '4'    THEN 'EM REVISÃO'

    WHEN STASER.codStatusServico = '5'    THEN 'FINALIZADO'

    WHEN STASER.codStatusServico = '6'    THEN 'AGUARDANDO CORREÇÃO DE ATIVIDADE'

    WHEN STASER.codStatusServico = '7'    THEN 'PRONTO PARA REVISÃO'

    WHEN STASER.codStatusServico = '8'    THEN 'PENDENTE DE FINALIZAÇÃO'

    WHEN STASER.codStatusServico = '9'    THEN 'CANCELADO'

    WHEN STASER.codStatusServico = '10'   THEN 'AGUARDANDO DOCUMENTAÇÃO'

    WHEN STASER.codStatusServico =  ''    THEN 'SEM INF'

               

    END) AS 'STATUS_1ª_FASE',

    ----------------------INICIO DO CASE-------------------------------------------------------------


    (CASE

     

    WHEN STASER.codStatusServico = '1'    THEN '0'

    WHEN STASER.codStatusServico = '2'    THEN '0'

    WHEN STASER.codStatusServico = '3'    THEN '1' --- NA BASE ESSE STATUS ESTÁ DENOMINDADO "AGUARDANDO REVISAO". NESSE CASE O STATUS FOI ALTERADO DE FORMA PREPOSITAL. A ATIVIDADE DE LOCALIZAÇÃO NÃO POSSUI REVISOR. ----

    WHEN STASER.codStatusServico = '4'    THEN '0'

    WHEN STASER.codStatusServico = '5'    THEN '1'

    WHEN STASER.codStatusServico = '6'    THEN '0'

    WHEN STASER.codStatusServico = '7'    THEN '0'

    WHEN STASER.codStatusServico = '8'    THEN '0'

    WHEN STASER.codStatusServico = '9'    THEN '0'

    WHEN STASER.codStatusServico = '10'   THEN '0'

    WHEN STASER.codStatusServico =  ''    THEN '0'

               

    END) AS 'STATUS_1ª_FASE'


     

    FROM tb_solicitacao AS S

    FULL OUTER JOIN tb_solicitacao_servico AS SS ON S.codSolicitacao = SS.codSolicitacao

    FULL OUTER JOIN tb_solicitacao_analista AS SSA ON SSA.codSolicitacao = S.codSolicitacao AND SS.codServico = SSA.codServico

    FULL OUTER JOIN tb_usuario_sistema AS US ON US.codUsuarioSistema = SSA.codAnalista

    FULL OUTER JOIN tb_servico AS SER ON SER.codServico = SS.codServico

    FULL OUTER JOIN tb_conclusao AS CON ON CON.codConclusao = SS.codConclusao

    FULL OUTER JOIN tb_status_solicitacao AS STASA ON STASA.codstatusSolicitacao = S.codstatusSolicitacao

    FULL OUTER JOIN tb_lote AS L ON L.codLote = S.codLote

    FULL OUTER JOIN tb_setor AS SETO ON SETO.codSetor = L.codSetor

    FULL OUTER JOIN tb_departamento AS DEP ON DEP.codDepartamento = SETO.codDepartamento

    FULL OUTER JOIN tb_prazo AS PRAZO ON PRAZO.codDepartamento = DEP.codDepartamento AND PRAZO.codServico = SS.codServico

    FULL OUTER JOIN tb_cliente AS C ON C.codCliente = DEP.codCliente

    FULL OUTER JOIN tb_status_servico AS STASER ON STASER.codStatusServico = SS.codStatusServico

     

    WHERE SS.codServico = '35' AND

     

    ---SETO.nmSetor NOT IN ('PANCONS') AND

    ---DEP.codDepartamento IN ('40','44','45') AND

    ---- 40 = BANCO PAN               ----

    ---- 44 = PRIORITÁRIO             ----

    ---- 45 = BANCO PAN - PRIORITÁRIO ----

     

    ---(S.codStatusSolicitacao NOT IN ('7'))

    dtSolicitacao > '2016-01-01' -- aa/dd/mm --

    AND S.codSolicitacao NOT IN ('10328')

    AND STASER.codStatusServico NOT IN ('9')

     

    ---AND dtFimAtendimento > '2016-26-08' -- aa/dd/mm --

    ---AND [DT_HH_INICIO_ANALISE] NOT IN ('')

    ---AND [DT_HH_FIM_ANALISE] NOT IN ('')

    ----AND S.codSolicitacao  IN ('17742','17744','17743','17613','17614','17615','17742','17744','17743')

     

    GROUP BY S.codSolicitacao, S.dtSolicitacao, STASA.codStatusSolicitacao, L.anoLote, S.codLote, L.nroLote,

            SETO.nmSetor, SETO.codExterno, C.nmCliente, PRAZO.diasPrazo,SS.codServico,CON.descConclusao,

           US.nmUsuarioSistema, dtFimAtendimento,STASER.codStatusServico,hrInicioAtendimento,hrFimAtendimento,

           SSA.codatendimento,[dtInicioAtendimento], [dtFimAtendimento]

     

     

    segunda-feira, 19 de setembro de 2016 16:51
  • Deleted
    segunda-feira, 19 de setembro de 2016 17:02
  • Deleted
    terça-feira, 20 de setembro de 2016 12:24