Página 1 de 1

Subtração entre duas datas em linhas diferentes

Enviado: Seg, 07 Out 2013 2:24 pm
por ecio
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?

Re: Subtração entre duas datas em linhas diferentes

Enviado: Seg, 07 Out 2013 4:04 pm
por dr_gori
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.