Página 1 de 1
Calcular diferença entre horas
Enviado: Ter, 22 Mai 2012 8:09 am
por douglasmattos
Pessoal, bom dia!
Sou novo no forum e preciso muito da ajuda de vocês.
Estou fazendo um select onde busco a hora em que um paciente começou a ser classificado e a hora em que o médico começou o atendimento... Preciso pegar a diferença entre essas horas.EX: medico atendeu as 14:30 e paciente foi classificado 14:00. => 14:30 - 14:00 = 30
Selecionar tudo
select t.cd_atendimento
, s.cd_tipo_tempo_processo
, p.ds_tipo_tempo_processo
, s.dh_processo
from triagem_atendimento t
, sacr_tempo_processo s
, sacr_tipo_tempo_processo p
where t.cd_atendimento = 1789227
and t.cd_triagem_atendimento = s.cd_triagem_atendimento
and s.cd_tipo_tempo_processo = p.cd_tipo_tempo_processo
and s.cd_tipo_tempo_processo IN (11,31)
Esse select me retorna as seguinte informações:
Selecionar tudo
ATENDIMENTO | CD_TIPO_TEMPO_PROCESSO | DS_TIPO_TEMPO_PROCESSO | DH_PROCESSO
1789227 | 11 | CLASSIFICAÇÃO INÍCIO | 21-mai-2012 15:04:44
1789227 | 31 | ATENDIMENTO MÉDICO INÍCIO | 21-mai-2012 15:30:43
A dúvida é, como faço para calcular a diferença entre essas horas?
Re: Calcular diferença entre horas
Enviado: Ter, 22 Mai 2012 8:16 am
por DanielNN
Re: Calcular diferença entre horas
Enviado: Ter, 22 Mai 2012 8:33 am
por douglasmattos
Noctifero, obrigado pelas dicas...Mas nos exemplos que você me passou o pessoal utiliza duas colunas da tabela DT_inicial, Dt_final...
No meu caso a data esta em uma unica coluna, porem o resultado traz duas linhas com a data e hora e preciso calcular a diferença entre elas...
não sei se deu para entender..
Thanks
Re: Calcular diferença entre horas
Enviado: Ter, 22 Mai 2012 9:11 am
por DanielNN
É o mesmo campo mas basta transformar em colunas.
Você pode simplesmente filtrar a tabela para cada tipo. EX:
Selecionar tudo
SELECT t.cd_atendimento
,s1.cd_tipo_tempo_processo
,s2.cd_tipo_tempo_processo
,s1.dh_processo
,s2.dh_processo
, s2.dh_processo - s1.dh_processo
FROM triagem_atendimento t
,sacr_tempo_processo s1 --inicio
,sacr_tempo_processo s2 --medico
WHERE t.cd_atendimento = 1789227
AND t.cd_triagem_atendimento = s1.cd_triagem_atendimento
AND t.cd_triagem_atendimento = s2.cd_triagem_atendimento
AND s1.cd_tipo_tempo_processo = 11
AND s1.cd_tipo_tempo_processo = 31
Aí você calcula a diferença da forma que lhe apeteça.
OBS: Isso se você deseja retornar todos atendimento que já tenham passado por estes 2 estágios. Caso possa não ser completo, precisa usar outter join. Também retirei a descrição do tipo de atendimento.
Re: Calcular diferença entre horas
Enviado: Ter, 22 Mai 2012 9:41 am
por douglasmattos
Esta quase lá....rsrs
O select que você me mandou eu alterei somente a ultima linha e rodei o script. Ele me retornou os seguinte dados:
Selecionar tudo
DH_Processo1: 21-mai-2012 15:30:43
DH_Processo2: 21-mai-2012 15:04:44
O resultado de DH_Processo1 - DH_Processo2 esta dando 0,0...
Já converti para to_char e continua dando o mesmo resultado
Selecionar tudo
SELECT t.cd_atendimento
,s1.cd_tipo_tempo_processo
,s2.cd_tipo_tempo_processo
,s2.dh_processo
,s1.dh_processo
,s2.dh_processo - s1.dh_processo
FROM triagem_atendimento t
,sacr_tempo_processo s1 --inicio
,sacr_tempo_processo s2 --medico
WHERE t.cd_atendimento = 1789227
AND t.cd_triagem_atendimento = s1.cd_triagem_atendimento
AND t.cd_triagem_atendimento = s2.cd_triagem_atendimento
AND s1.cd_tipo_tempo_processo = 11
AND s2.cd_tipo_tempo_processo = 31
Alguém tem idéia do que pode ser?
Re: Calcular diferença entre horas
Enviado: Ter, 22 Mai 2012 10:20 am
por DanielNN
O select que você me mandou eu alterei somente a ultima linha e rodei o script. Ele me retornou os seguinte dados:
Qual o exato retorno do select que te passei??
"dh_processo" é tipo DATE?? TEM que ser DATE, você não pode subtrair CHAR.
Re: Calcular diferença entre horas
Enviado: Ter, 22 Mai 2012 3:10 pm
por douglasmattos
O select que você me passou não retorna nada, isso ocorre por que na ultima linha você deixou:
Selecionar tudo
AND s1.cd_tipo_tempo_processo = 11
AND s1.cd_tipo_tempo_processo = 31
para retornar eu alterei para a seguinte forma:
Selecionar tudo
AND s1.cd_tipo_tempo_processo = 11
AND s2.cd_tipo_tempo_processo = 31
assim ele pega o valor da data e hora da tabela s2 e s1.
Os capos são do tipo date..
Re: Calcular diferença entre horas
Enviado: Ter, 22 Mai 2012 5:00 pm
por DanielNN
Ok, esqueci de alterar... mas qual resultado????
como fica os campos com as horas?
Re: Calcular diferença entre horas
Enviado: Qua, 23 Mai 2012 9:49 am
por douglasmattos
Bom dia,
No select você colocou ,
s2.dh_processo - s1.dh_processo, ou seja vai subtrair uma data pela outra correto?
O valor que esta me retornando dessa subtração é 0,0 pois as datas são do mesmo dia.
O que eu preciso é pegar a hora que esta neste campo data e verificar a diferença entre as horas.
Exemplo:
Selecionar tudo
DATA1 : 21/05/2012 12:00
DATA2 : 21/05/2012 12:30
DATA1 - DATA2 = 30
Não estou conseguindo pegar a hora...
Re: Calcular diferença entre horas
Enviado: Qua, 23 Mai 2012 10:11 am
por DanielNN
Vou tentar ser mais claro:
quero saber como fica a linha do retorno do select:
EX:
Selecionar tudo
t.cd_atendimento | s1.cd_tipo_tempo_processo | s2.cd_tipo_tempo_processo | s2.dh_processo | s1.dh_processo
1789227 | 11 | 31 | 21-mai-2012 15:04:44 | 21-mai-2012 15:30:43;
Teoricamente deve vir um retorno assim.
Re: Calcular diferença entre horas
Enviado: Qua, 23 Mai 2012 3:59 pm
por douglasmattos
Exatamente, vem dessa maneira mesmo...
resultado da subtração
Selecionar tudo
1789227 | 11 | 31 | 21/05/2012 15:30:43 | 21/05/2012 15:04:44 | 0,0
Re: Calcular diferença entre horas
Enviado: Qua, 23 Mai 2012 4:46 pm
por DanielNN
Cara, se for date mesmo é para vir, na diferença, nesse caso: "0.0180439814814815".
Verifique se não é sua IDE que está arredondando com uma casa decimal.
Multiplique a diferença por 100, só para averiguar.
Com relação a pegar o numero de horas/minutos/segundos só olhar aquele post que te indiquei.
Re: Calcular diferença entre horas
Enviado: Qui, 24 Mai 2012 7:51 am
por douglasmattos
Pessoal bom dia,
Noctifero muito obrigado pela ajuda, consegui pegar a diferença em minutos...
o problema ra era que eu não estava multiplicando o resultado pela quantidade de minutos que temos em um dia.
Fiz da seguinte forma e me trouxe o resultado espererado:
Selecionar tudo
ROUND(avg(to_char(s2.dh_processo - s1.dh_processo )*1440 )) "MEDIA MINUTOS"
Agora vou ler os post que você me indicou para converter os minutos em horas quando ultrapassar 60...
valeu!!!!!!