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!!!!!!