Calcular tempo de duração - Firebird 2.515h
05/08/2019
0
Possuo uma tabela que registra todas as ocorrências de cada etapa de processo de expedição.
Esta tabela possui as seguintes colunas conforme a imagem:
Etapas: 0 = Separação, 1 = Embalagem, 2 = Conferência, 3 = Embarque
Status: 0 = Aguardando, 1 = Iniciado, 2 = Finalizado, 3 = Em pausa
E assim, possuo a seguinte tela:
Exemplo:
Tenho a etapa de SEPARAÇÃO que entrou na etapa de Separação e estava com o status aguardando às 15h06, iniciou as 16h04 e finalizou as 16h06. Desse modo o tempo de duração dessa etapa foi de 1h10min.
Preciso calcular o tempo de duração de cada etapa independente do status, mas não sei como. (Ciente de que terei que criar uma view temporária para cada etapa)
Alguma solução para isto?
Esta tabela possui as seguintes colunas conforme a imagem:
https://imgur.com/a/xjm2sO0
Etapas: 0 = Separação, 1 = Embalagem, 2 = Conferência, 3 = Embarque
Status: 0 = Aguardando, 1 = Iniciado, 2 = Finalizado, 3 = Em pausa
E assim, possuo a seguinte tela:
https://imgur.com/a/tUvwdFv
Exemplo:
Tenho a etapa de SEPARAÇÃO que entrou na etapa de Separação e estava com o status aguardando às 15h06, iniciou as 16h04 e finalizou as 16h06. Desse modo o tempo de duração dessa etapa foi de 1h10min.
Preciso calcular o tempo de duração de cada etapa independente do status, mas não sei como. (Ciente de que terei que criar uma view temporária para cada etapa)
Alguma solução para isto?
Eduardo
Curtir tópico
+ 0
Responder
Posts
06/08/2019
Eduardo
Resolvido.
with vwEtapas as ( select a.idf_processoexp, a.etapa, a.status, a.dataoco ocorrencia, b.IDF_IDENT ididentusu, sum( (CAST(SUBSTRING(a.horaoco FROM 1 FOR 2) AS INTEGER) * 60) + (CAST(SUBSTRING(a.horaoco FROM 4 FOR 2) AS INTEGER)) ) HorasEmMinutos FROM M3_OCOPROCEXP A inner join MTMG_USUA B on B.ID = A.IDF_USUARIO where (a.idf_processoexp = 16102) group by a.idf_processoexp, a.status, a.etapa, b.IDF_IDENT, a.dataoco order by a.idf_processoexp, a.etapa, a.status ) , vwEtapasClassifica as ( select wep2.idf_processoexp, wep2.ididentusu, wep2.ocorrencia data, /* Horas Separação */ case when wep2.etapa = 0 then case when wep2.status = 1 then wep2.HorasEmMinutos else 0 end else 0 end HorasInicioSeparacao, case when wep2.etapa = 0 then case when wep2.status = 2 then wep2.HorasEmMinutos else 0 end else 0 end HorasConcluidoSeparacao, case when wep2.etapa = 0 then case when wep2.status = 4 then wep2.HorasEmMinutos else 0 end else 0 end HorasPausaSeparacao, /* Horas Embalagem */ case when wep2.etapa = 1 then case when wep2.status = 1 then wep2.HorasEmMinutos else 0 end else 0 end HorasInicioEmbalagem, case when wep2.etapa = 1 then case when wep2.status = 2 then wep2.HorasEmMinutos else 0 end else 0 end HorasConcluidoEmbalagem, case when wep2.etapa = 1 then case when wep2.status = 4 then wep2.HorasEmMinutos else 0 end else 0 end HorasPausaEmbalagem, /* Horas Conferência */ case when wep2.etapa = 2 then case when wep2.status = 1 then wep2.HorasEmMinutos else 0 end else 0 end HorasInicioConferencia, case when wep2.etapa = 2 then case when wep2.status = 2 then wep2.HorasEmMinutos else 0 end else 0 end HorasConcluidoConferencia, case when wep2.etapa = 2 then case when wep2.status = 4 then wep2.HorasEmMinutos else 0 end else 0 end HorasPausaConferencia, /* Horas Embarque */ case when wep2.etapa = 3 then case when wep2.status = 1 then wep2.HorasEmMinutos else 0 end else 0 end HorasInicioEmbarque, case when wep2.etapa = 3 then case when wep2.status = 2 then wep2.HorasEmMinutos else 0 end else 0 end HorasConcluidoEmbarque, case when wep2.etapa = 3 then case when wep2.status = 4 then wep2.HorasEmMinutos else 0 end else 0 end HorasPausaEmbarque FROM vwEtapas wep2 ) , vwEtapasSUM as ( select wep3.idf_processoexp, wep3.ididentusu, wep3.data data, sum(wep3.HorasInicioSeparacao) HorasInicioSeparacao, sum(wep3.HorasConcluidoSeparacao) HorasConcluidoSeparacao, sum(wep3.HorasInicioEmbalagem) HorasInicioEmbalagem, sum(wep3.HorasInicioConferencia) HorasInicioConferencia, sum(wep3.HorasInicioEmbarque) HorasInicioEmbarque, sum(wep3.HorasConcluidoEmbalagem) HorasConcluidoEmbalagem, sum(wep3.HorasConcluidoConferencia) HorasConcluidoConferencia, sum(wep3.HorasConcluidoEmbarque) HorasConcluidoEmbarque, sum(wep3.HorasPausaSeparacao) HorasPausaSeparacao, sum(wep3.HorasPausaEmbalagem) HorasPausaEmbalagem, sum(wep3.HorasPausaConferencia) HorasPausaConferencia, sum(wep3.HorasPausaEmbarque) HorasPausaEmbarque FROM vwEtapasClassifica wep3 group by wep3.idf_processoexp, wep3.ididentusu, wep3.data) select doc.nrodocto, idusu.nome, vwe.data, (vwe.HorasConcluidoSeparacao - vwe.HorasInicioSeparacao ) TempoSeparacao, (vwe.HorasConcluidoEmbalagem - vwe.HorasInicioEmbalagem ) TempoEmbalagem, (vwe.HorasConcluidoEmbarque - vwe.HorasInicioEmbarque ) TempoEmbarque, -- (vwe.HorasPausaSeparacao - vwe.HorasPausaEmbalagem - vwe.HorasPausaEmbarque ) TempoPausa FROM m3_procexpedi d inner join m3_integraexp ite on ite.id = d.idf_integraexp inner join m3_integra itg on itg.id = ite.ida inner join m3_docto doc on doc.id = itg.idf_docto inner join vwEtapasSUM vwe on vwe.idf_processoexp = d.id inner join MTMG_IDENT idusu on idusu.ID = vwe.ididentusu
Responder
Clique aqui para fazer login e interagir na Comunidade :)