Ir para conteúdo
Fórum Script Brasil
  • 0

Somar campo calculado


Ademilson Beirão

Pergunta

Boa tarde, que puder me dar uma ajuda agradeço muito, pois já quebrei a cabeça com essa consulta e nada ainda.

Preciso contar os atendimentos que estouraram um SLA, mas pra isso preciso do tempo total gasto

e não consigo utilizar um sum dentro do outro.

Gostaria de opiniões.

select 
             SUM(CASE 
--problema por causa do SUM, preciso da soma desse campo também SEC_TO_TIME(SUM(tempo.ts_tempo))
             WHEN SEC_TO_TIME(SUM(tempo.ts_tempo)) < SEC_TO_TIME(sla.slas_tempo*60) THEN 1 ELSE 0 END) 'No SLA',
             CASE
             WHEN SEC_TO_TIME(SUM(tempo.ts_tempo)) > SEC_TO_TIME(sla.slas_tempo*60) AND
             SEC_TO_TIME(SUM(tempo.ts_tempo)) < SEC_TO_TIME(sla.slas_tempo*60+sla.slas_tempo*60*0.20) THEN 1 ELSE 0 END 'ATE 20',
              CASE
             WHEN SEC_TO_TIME(SUM(tempo.ts_tempo)) > SEC_TO_TIME(sla.slas_tempo*60+sla.slas_tempo*60*0.20) THEN 1 ELSE 0 END 'ACIMA DE 20'

from ocorrencias o
inner join problemas prob on (o.problema=prob.prob_id)
inner join sla_solucao sla on (sla.slas_cod=prob.prob_sla)
inner join tempo_status tempo on (tempo.ts_ocorrencia=o.numero)
    where
        year(data_fechamento)=year(current_date) and
        month(data_fechamento)=month(current_date) and
        sistema=3 and
        status=4
group by NUMERO

Muito obrigado.

Editado por Denis Courcy
Melhorar entendimento do código
Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Se eu entendi o que você pretende:

select 
    sum(ts_tempo <= slas_tempo*60) as 'No SLA',
    sum(ts_tempo > slas_tempo*60 and ts_tempo <= slas_tempo*60*1.2) as 'ATE 20',
    sum(ts_tempo > slas_tempo*60*1.2) as 'ACIMA DE 20'
from (
    select numero, sum(tempo.ts_tempo) as ts_tempo, sum(sla.slas_tempo) as slas_tempo
    from ocorrencias o
    inner join problemas prob on (o.problema=prob.prob_id)
    inner join sla_solucao sla on (sla.slas_cod=prob.prob_sla)
    inner join tempo_status tempo on (tempo.ts_ocorrencia=o.numero)
    where
        year(data_fechamento)=year(current_date) and
        month(data_fechamento)=month(current_date) and
        sistema=3 and
        status=4
    group by NUMERO
) ss
;

Editado por Kakao
Link para o comentário
Compartilhar em outros sites

  • 0

Oi, 'Ademilson Beirão'

Tente assim:

SELECT 
   SUM(CASE WHEN t.temposomado < SEC_TO_TIME(sla.slas_tempo*60) THEN 1 ELSE 0 END) 'No SLA',
       CASE WHEN t.temposomado > SEC_TO_TIME(sla.slas_tempo*60) AND
               t.temposomado < SEC_TO_TIME(sla.slas_tempo*60+sla.slas_tempo*60*0.20) THEN 1 ELSE 0 END 'ATE 20',
       CASE WHEN t.temposomado > SEC_TO_TIME(sla.slas_tempo*60+sla.slas_tempo*60*0.20) THEN 1 ELSE 0 END 'ACIMA DE 20'
from ocorrencias o
inner join (select ts_ocorrencia, SEC_TO_TIME(SUM(tempo.ts_tempo)) as temposomado from tempo_status group by ocorrencia) t ON (t.ts_ocorrencia=o.numero)
inner join problemas prob on (o.problema=prob.prob_id)
inner join sla_solucao sla on (sla.slas_cod=prob.prob_sla)
    where
        year(data_fechamento)=year(current_date) and
        month(data_fechamento)=month(current_date) and
        sistema=3 and
        status=4
group by NUMERO

Não tenho como preparar uma massa de testes para saber se está correto. mas a idéia é esta.

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...