Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Salve Galera, estou quase finalizando um relatório porém travei em um campo.
Este relatório consiste em subtrair hora de entrada e saída, trazer em dias horas e minutos de um período.
Depois preciso calcular a média destes resultados.
eu barrei na parte de dias não vem a informação correta.
Segue select se alguem puder me dar uma força.
SELECT io.id_in_out, IOP.DOCUMENT,IO.TIME_IN entrada, IO.TIME_RELEASE_PP saida,
LPAD(TRUNC(((IO.TIME_RELEASE_PP - IO.TIME_IN) /24 )), 2, '0') || ':' ||
LPAD(TRUNC(((IO.TIME_RELEASE_PP - IO.TIME_IN) * 24 )), 2, '0') || ':' ||
LPAD(TRUNC(MOD((IO.TIME_RELEASE_PP - IO.TIME_IN) * 86400, 3600) / 60), 2, '0') || ':' ||
LPAD(TRUNC(MOD(MOD((IO.TIME_RELEASE_PP - IO.TIME_IN) * 86400, 3600), 60)), 2, '0') TEMPO
FROM DESMEMBR DD,
IN_OUT_POS IOP,
IN_OUT IO,
SPEDITEURE S,
VEHICLE V,
DRIVER D
WHERE DD.TYP_PROCESS = 'DINACI'
AND 'DI' = IOP.TYP_DOCUMENT
AND DD.NR_DI = IOP.DOCUMENT
AND IOP.ID_IN_OUT = IO.ID_IN_OUT
AND IO.ART_IN_OUT IN ('CA', 'CC', 'CCE')
AND IO.STAT <> '80'
AND S.ID_SPEDITEUR = IO.ID_SPEDITEUR
AND V.ID_VEHICLE = IO.ID_VEHICLE
AND IO.TIME_IN >= TO_DATE('01/12/2018', 'dd/mm/yyyy')
AND IO.TIME_IN <= TO_DATE('31/12/2018', 'dd/mm/yyyy')
AND D.ID_DRIVER = IO.ID_DRIVER
O resultado acima está vindo assim:
1 378470 1211942181 14/12/2017 09:35:41 14/12/2017 13:32:31 00:03:56:50
2 378470 1211942181 14/12/2017 09:35:41 14/12/2017 13:32:31 00:03:56:50
Depois de acertar isso preciso realizar a média que a principio eu utilizaria o AVG mas dá erro.
Agradeço quem puder me ajudar.se isto ajudar em php está ai
$horario_notificacao = $notificacoes[$i]['tempo'];
$data_convertido = date('d/m/Y',strtotime($horario_notificacao));
$horario_convertido = date('H/i/s',strtotime($horario_notificacao));
$data = explode("/", $data_convertido);
$dia = $data[0];
$mes = $data[1];
$ano = $data[2];
//pega valores da data, dia, mes e ano em que aconteceu a noitificação
$horas_ano = 24 * 30 * 12;
$horas_mes = 24 * 30;
$horas_dia = 24;
//converte dia, mes, ano em horas
$horas_data_dia = $dia * $horas_dia;
$horas_data_mes = $mes * 24 * 30;
$horas_data_ano = $ano * 24 * 30 * 12;
$horas_data = $horas_data_dia + $horas_data_mes + $horas_data_ano;
$data_atual = date('d/m/Y');
$data_atual = explode("/", $data_atual);
$dia_atual = $data_atual[0];
$mes_atual = $data_atual[1];
$ano_atual = $data_atual[2];
$horas_atual_dia = $dia_atual * $horas_dia;
$horas_atual_mes = $mes_atual * $horas_mes;
$horas_atual_ano = $ano_atual * $horas_ano;
$horas_atuais = $horas_atual_dia + $horas_atual_mes + $horas_atual_ano;
$diferenca_horas = ($horas_atuais - $horas_data);
eu não entendo esta linguagem, mas da pra pegar uma lógica na minha solução que utilizei para calcular a diferença de horas entre uma notificaçãoSim estão
Vou tentar realizar as alterações que você informou no link, vamos ver o que dá.
Valeu por enquanto
>
1 hora atrás, Motta disse:
Os campos estão no formato DATE ?
Se tem a data e hora ?
Quando se subtrai duas "dates" se obtem uma diferença em dias (ou fração)
Uma solução é trabalahr em segundos e depois converter estes valores.
Não sei se o AVG é aceito para DATE , nunca tentei.
veja se istoajuda
Motta boa tarde olha o que eu fiz, acho que deu certo:
SELECT LPAD(TRUNC(AVG((F.TEMPO)) / (24 * 60 * 60)), 2, '0') || ':' ||
TO_CHAR(TO_DATE('01/01/2013 00:00:00', 'DD/MM/YYYY HH24:MI:SS') +
(AVG(F.TEMPO)) / (24 * 60 * 60),
'HH24:MI:SS') MEDIA
FROM (SELECT X.ID_IN_OUT, 24 * 60 * 60 * (X.SAIDA - X.ENTRADA) TEMPO
FROM (SELECT IO.ID_IN_OUT,
IOP.DOCUMENT,
IO.TIME_IN ENTRADA,
IO.TIME_RELEASE_PP SAIDA
FROM DESMEMBR DD,
IN_OUT_POS IOP,
IN_OUT IO,
SPEDITEURE S,
VEHICLE V,
DRIVER D
WHERE DD.TYP_PROCESS = 'DINACI'
AND 'DI' = IOP.TYP_DOCUMENT
AND DD.NR_DI = IOP.DOCUMENT
AND IOP.ID_IN_OUT = IO.ID_IN_OUT
AND IO.ART_IN_OUT IN ('CA', 'CC', 'CCE')
AND IO.STAT <> '80'
AND S.ID_SPEDITEUR = IO.ID_SPEDITEUR
AND V.ID_VEHICLE = IO.ID_VEHICLE
--AND IO.ID_IN_OUT = '385617'
AND IO.TIME_IN >= TO_DATE('01/12/2018', 'dd/mm/yyyy')
AND IO.TIME_IN <= TO_DATE('31/12/2018', 'dd/mm/yyyy')
AND D.ID_DRIVER = IO.ID_DRIVER) X) F

Os campos estão no formato DATE ?
Se tem a data e hora ?
Quando se subtrai duas "dates" se obtem uma diferença em dias (ou fração)
Uma solução é trabalahr em segundos e depois converter estes valores.
Não sei se o AVG é aceito para DATE , nunca tentei.
veja se istoajuda