Subtração entre duas datas em linhas diferentes

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
Avatar do usuário
ecio
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 9
Registrado em: Ter, 31 Jul 2012 1:00 am
Localização: Salvador-BA
"É o grau de comprometimento que determina o sucesso e não a quantidade de seguidores."

Pessoal, veja bem consegui aqui mesmo no fórum como fazer para subtrair o tempo em horas utilizando esse select:

Selecionar tudo

select mopa_dt_saida, mopa_dt_entrada,
trunc(( (mopa_dt_saida - mopa_dt_entrada) * 86400 / 3600)) ||':' || 
trunc(mod( (mopa_dt_saida - mopa_dt_entrada) * 86400 , 3600 ) / 60 ) || ':'|| 
trunc(mod ( mod ( (mopa_dt_saida - mopa_dt_entrada) * 86400, 3600 ), 60 )) as "HH:MM:SS"
from movimentacoes_pacientes WHERE mopa_leit_cod = 'AP311' order by 1 desc
O resultado foi esse:

Imagem

Vejam que o select está fazendo o calculo com as datas na mesma linha. Acontece que queria saber como fazer para esse select calcular a segunda linha da primeira coluna com a primeira linha da segunda coluna e assim por diante....

É possível?
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Sim, é bem facil de fazer isso.
Você utiliza funções analíticas. Aqui tem um link com um ótimo texto:

https://glufke.net/oracle/download/funco ... TICAS.html

Veja esse exemplo, ele ta pegando o valor da próxima linha. Então, basta subtrair:

Selecionar tudo

SELECT ename, hiredate,
LEAD(hiredate, 1) OVER (ORDER BY hiredate) AS NextHired
FROM emp WHERE deptno = 30;
Basta você adaptar isso aí no seu select com os campos desejados.
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 2 visitantes