Página 1 de 1
Auxílio em SQL para Relatório
Enviado: Seg, 29 Ago 2016 11:45 am
por jiopra
Tenho um sql aqui q é a base de um relatorio do meu sistema relacionado a tempo de espera de atendimentos médicos:
Selecionar tudo
select
a.nr_atendimento,
substr(obter_min_entre_datas(a.dt_entrada, a.dt_atend_medico,null),1,50) qt_tempo_espera,
substr(obter_min_entre_datas(a.dt_atend_medico, a.dt_fim_consulta, null),1,50) qt_temp_atend,
substr(obter_nome_pf(a.cd_pessoa_fisica),1,50) nm_paciente,
substr(obter_nome_pf(a.cd_medico_resp),1,50) nm_medico,
a.dt_entrada,
a.dt_inicio_atendimento,
a.dt_fim_triagem,
a.dt_alta,
substr(obter_dif_data(a.dt_inicio_atendimento,a.dt_fim_triagem,null),1,20) teste,
substr(obter_dif_data(a.dt_entrada,a.dt_alta,null),1,20) qt_tempo_atendimento
from atendimento_paciente a
where a.dt_entrada between trunc(:dt_inicial) and fim_dia(:dt_final)
and ((:cd_setor_atendimento = obter_setor_atendimento(a.nr_atendimento)) or (:cd_setor_atendimento = '0'))
order by
a.dt_entrada
na coluna - qt_tempo_espera e na coluna qt_temp_atend, preciso realizar a soma dos minutos do relatorio e ao fim das colunas exibir um total dos minutos, como poderia fazer esse sum com as substr?
Re: Auxílio em SQL para Relatório
Enviado: Seg, 29 Ago 2016 2:25 pm
por spernega
Boa tarde,
Você pode tentar usar o extract (minute.
Já existem alguns tópicos aqui no forum.
Re: Auxílio em SQL para Relatório
Enviado: Qua, 31 Ago 2016 2:20 pm
por geovani
Opa!
Pelo que vi, você está usando uma função que calcula o tempo entre duas datas e retorna no formato de texto, e depois você quer somar esses dois tempos do tipo texto, é isso?
Para tomar o tempo total, porque você não usando essa função usando a.dt_entrada e a.dt_fim_consulta ?
exemplo:
Selecionar tudo
substr(obter_min_entre_datas(a.dt_entrada, a.dt_fim_consulta,null),1,50) qt_tempo_total
Re: Auxílio em SQL para Relatório
Enviado: Qua, 31 Ago 2016 3:13 pm
por jiopra
Opa Geovani,
então mano é isso mesmo, preciso exibir a soma nas duas funções, fiz dessa forma porque preciso dos dados das duas colunas separas, a primeira exibe o tempo em minutos que o medico demorou para chamar a paciente desde sua entrada no hospital, e o outro exibe o tempo que o medico demorou para atender a paciente depois da chamada ate a hora da alta.
se puder se dar uma força em como posso fazer essa somatoria do total de cada coluna separado te agradeço, porque preciso exibir esses dados em uma reuniao dia 5/9
valeu abração.
Re: Auxílio em SQL para Relatório
Enviado: Qua, 31 Ago 2016 6:15 pm
por geovani
Veja se assim que você precisa:
Selecionar tudo
trunc((((a.dt_atend_medico - a.dt_entrada) + (a.dt_fim_consulta - a.dt_atend_medico)) * 86400)/3600) hora,
trunc(mod(((((a.dt_atend_medico - a.dt_entrada) + (a.dt_fim_consulta - a.dt_atend_medico)) * 86400)/60),60)) minuto,
lpad(trunc((((a.dt_atend_medico - a.dt_entrada) + (a.dt_fim_consulta - a.dt_atend_medico)) * 86400)/3600),2,0) ||':'||
lpad(trunc(mod(((((a.dt_atend_medico - a.dt_entrada) + (a.dt_fim_consulta - a.dt_atend_medico)) * 86400)/60),60)),2,0) hhmm
Re: Auxílio em SQL para Relatório
Enviado: Qui, 01 Set 2016 11:25 am
por jiopra
Bom dia Geovani,
apliquei o código em meu sql, porém não realizou a calculo total das colunas, acho que apliquei o código no lugar errado do sql, poderia me informar em qual parte do sql aplico a codificação, só para ver se eu apliquei no lugar certo.
Muito Obrigado
Abraço
Re: Auxílio em SQL para Relatório
Enviado: Qui, 01 Set 2016 11:41 am
por geovani
Basta incluir os campos abaixo, segue o código:
Selecionar tudo
select
a.nr_atendimento,
substr(obter_min_entre_datas(a.dt_entrada,a.dt_atend_medico,null),1,50) qt_tempo_espera,
substr(obter_min_entre_datas(a.dt_atend_medico,a.dt_fim_consulta,null),1,50) qt_temp_atend,
substr(obter_nome_pf(a.cd_pessoa_fisica),1,50) nm_paciente,
substr(obter_nome_pf(a.cd_medico_resp),1,50) nm_medico,
a.dt_entrada,
a.dt_inicio_atendimento,
a.dt_fim_triagem,
a.dt_alta,
substr(obter_dif_data(a.dt_inicio_atendimento,a.dt_fim_triagem,null),1,20) teste,
substr(obter_dif_data(a.dt_entrada,a.dt_alta,null),1,20) qt_tempo_atendimento,
trunc((((a.dt_atend_medico - a.dt_entrada) + (a.dt_fim_consulta - a.dt_atend_medico)) * 86400)/3600) hora,
trunc(mod(((((a.dt_atend_medico - a.dt_entrada) + (a.dt_fim_consulta - a.dt_atend_medico)) * 86400)/60),60)) minuto,
lpad(trunc((((a.dt_atend_medico - a.dt_entrada) + (a.dt_fim_consulta - a.dt_atend_medico)) * 86400)/3600),2,0) ||':'||
lpad(trunc(mod(((((a.dt_atend_medico - a.dt_entrada) + (a.dt_fim_consulta - a.dt_atend_medico)) * 86400)/60),60)),2,0) hhmm
from
atendimento_paciente a
where
a.dt_entrada between trunc(:dt_inicial) and fim_dia(:dt_final)
and (:cd_setor_atendimento = obter_setor_atendimento(a.nr_atendimento) or :cd_setor_atendimento = '0')
order by
a.dt_entrada
Re: Auxílio em SQL para Relatório
Enviado: Qui, 01 Set 2016 4:10 pm
por jiopra
eitaaa geovani
descobri o problema mano, o meu relatório só consegue somar valores numerics, por isso não está dando certo, preciso converter os valores das duas colunas
Selecionar tudo
substr(obter_min_entre_datas(a.dt_entrada,a.dt_atend_medico,null),1,50) qt_tempo_espera,
substr(obter_min_entre_datas(a.dt_atend_medico,a.dt_fim_consulta,null),1,50) qt_temp_atend,
para um valor numerico ai assim consigo faz o total, sabes como realizar essa mudança ? sei que o campo das data é date.
abraçãoo
Re: Auxílio em SQL para Relatório
Enviado: Qui, 01 Set 2016 4:27 pm
por geovani
Não estou entendo o que você precisa.
Essa função obter_min_entre_datas retorna em qual formato? se for numérico basta somar:
Selecionar tudo
substr(obter_min_entre_datas(a.dt_entrada,a.dt_atend_medico,null),1,50) +
substr(obter_min_entre_datas(a.dt_atend_medico,a.dt_fim_consulta,null),1,50)
Re: Auxílio em SQL para Relatório
Enviado: Qui, 01 Set 2016 5:27 pm
por jiopra
Assim geovani, veja se isso é possivel,
Selecionar tudo
substr(obter_min_entre_datas(a.dt_entrada,a.dt_atend_medico,null),1,50) qt_tempo_espera
essa função OBTER os dois campos que estou utilizando a.dt_entrada e a.dt_atend_medico ambos são do tipo DATE logo a coluna QT_TEMPO_ESPERA também é DATE, precisaria converter o dado antes de ser mostrado na coluna para tipo NUMBER que ai consigo realizar a soma da coluna toda pelo meu proprio gerenciador do relatorio do sistema.
conseguiu me entender?
kkkkk
Re: Auxílio em SQL para Relatório
Enviado: Qui, 01 Set 2016 5:57 pm
por geovani
Você tem certeza que o retorno é uma data? pelo nome da função parece que retorna um número, rsrsrs.
Passa a função para entendermos melhor.
Se retorna mesmo uma data, basta multiplicar por 86400 para converter em segundos.
Ex:
Selecionar tudo
obter_min_entre_datas(a.dt_entrada,a.dt_atend_medico,null) * 86400 qt_tempo_espera
Re: Auxílio em SQL para Relatório
Enviado: Sex, 02 Set 2016 7:31 am
por spernega
Bom dia,
Veja se esta função ajuda alguma coisa.
Selecionar tudo
create or replace
function Fn_Intervalo_Tempo (P_Dt_Inic in date,
P_Dt_Fina in date) return varchar2 is
v_inte number;
v_Hora varchar2(200);
--
cursor c is
SELECT lpad( extract (day from numtodsinterval(v_inte, 'day')) ,5,' ') Qt_Dias,
lpad( extract (hour from numtodsinterval(v_inte, 'day')) ,2,'0') Qt_Horas,
lpad( extract (minute from numtodsinterval(v_inte, 'day' )) ,2,'0') Qt_Minutos,
lpad( extract (second from numtodsinterval(v_inte, 'day')) ,2,'0') Qt_Segundos
FROM dual;
c_r c%rowtype;
--
begin
--
v_inte := trunc((p_dt_Fina - p_dt_Inic),6);
dbms_output.put_line('v_inte '||to_char(v_inte));
--
open c;
fetch c into c_r;
if c%found then
--
dbms_output.put_line('c_r.Qt_Dias '||c_r.Qt_Dias);
dbms_output.put_line('c_r.Qt_Horas '||c_r.Qt_Horas);
dbms_output.put_line('c_r.Qt_Minutos '||c_r.Qt_Minutos);
dbms_output.put_line('c_r.Qt_Segundos '||lpad(trunc(c_r.Qt_Segundos),2,'0'));
--
v_hora := c_r.Qt_Dias||' '||c_r.Qt_Horas||':'||c_r.Qt_Minutos||':'||lpad(trunc(c_r.Qt_Segundos),2,'0');
end if;
close c;
return v_hora;
exception
when others then
return 'erro';
End;
/
Pra trazer o total em minutos precisa tratar os resultados.
Hora * 60
Dias * 1440
Re: Auxílio em SQL para Relatório
Enviado: Seg, 05 Set 2016 8:24 am
por jiopra
Pessoal agradeço pelas dicas, mas nada resolveu meu problema, vou tentar realizar de uma outra forma o ajuste.
obrigado
Re: Auxílio em SQL para Relatório
Enviado: Seg, 05 Set 2016 11:49 am
por geovani
jiopra,
Acho que não conseguimos porque não ficou claro exatamente o que você precisa, mas acredito que as dicas e funções passadas aqui você conseguirá.
Valeu!