Página 1 de 1
Pegar linha anterior
Enviado: Seg, 02 Jan 2017 10:31 am
por cleberz
Bom dia senhores. Como eu faço para pegar em uma tabela o registro anterior?
ex:
Selecionar tudo
STRT_DT END_DT
--------- --------
26/10/16 30/12/16
01/11/16 01/11/16
02/11/16 30/12/16
23/11/16 23/11/16
A SEGUNDA LINHA ESTA ERRADA porque O CAMPO STRT_DT(01/11/16) É MENOR DO QUE O CAMPO END_DT(30/12/16) DA PRIMEIRA LINHA.
Aí preciso pegar a linha anterior de STRT_DT(01/11/16)
A ULTIMA LINHA ESTA ERRADA porque O CAMPO STRT(23/11/16) É MENOR DO QUE O CAMPO END_DT(30/12/16) DA PENULTIMA LINHA.
Aí preciso pegar a linha anterior de STRT(23/11/16)
Re: Pegar linha anterior
Enviado: Ter, 03 Jan 2017 9:51 am
por spernega
Bom dia,
Essa é uma tabela com vigências e você precisa pegar as inconsistências?
Re: Pegar linha anterior
Enviado: Qua, 04 Jan 2017 10:11 am
por dr_gori
É possível usar funções analíticas pra buscar a linha anterior.
Por exemplo: (neste caso, agrupando por departamento)
Selecionar tudo
select hiredate
, LAG(hiredate,1,NULL)
OVER (PARTITION BY deptno
ORDER BY hiredate, ename)
From EMP;
Selecionar tudo
DEPTNO ENAME HIREDATE LAG(HIREDATE,1,NULL)OVER(PARTI
------ ---------- ----------- ------------------------------
10 CLARK 6/9/1981
10 KING 11/17/1981 6/9/1981
10 MILLER 1/23/1982 11/17/1981
20 SMITH 12/17/1980
20 JONES 4/2/1981 12/17/1980
20 FORD 12/3/1981 4/2/1981
20 SCOTT 4/19/1987 12/3/1981
20 ADAMS 5/23/1987 4/19/1987
30 ALLEN 2/20/1981
30 WARD 2/22/1981 2/20/1981
30 BLAKE 5/1/1981 2/22/1981
30 TURNER 9/8/1981 5/1/1981
30 MARTIN 9/28/1981 9/8/1981
30 JAMES 12/3/1981 9/28/1981
14 rows selected
Ou também tem como fazer a tabela toda: (sem agrupamento)
Selecionar tudo
select hiredate
, LAG(hiredate,1,NULL)
OVER (PARTITION BY NULL
ORDER BY hiredate, ename)
From EMP;
Selecionar tudo
HIREDATE LAG(HIREDATE,1,NULL)OVER(PARTI
----------- ------------------------------
12/17/1980
2/20/1981 12/17/1980
2/22/1981 2/20/1981
4/2/1981 2/22/1981
5/1/1981 4/2/1981
6/9/1981 5/1/1981
9/8/1981 6/9/1981
9/28/1981 9/8/1981
11/17/1981 9/28/1981
12/3/1981 11/17/1981
12/3/1981 12/3/1981
1/23/1982 12/3/1981
4/19/1987 1/23/1982
5/23/1987 4/19/1987
Veja esse texto com diversos exemplos de funções analíticas:
https://glufke.net/oracle/download/funco ... TICAS.html