Calcular tempo de duração - Firebird 2.515h
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
Curtidas 0
Respostas
Eduardo
05/08/2019
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
GOSTEI 0