Inquiridor
MINUTOS NEGATIVOS

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"?
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
----------------------------------------------------------
-
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
-
-
-
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
-
-
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]
-
-