Achar diferença entre datas e usando pivot

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
Det
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 16
Registrado em: Sex, 20 Dez 2019 2:29 pm

Bom dia pessoal.

Vamos imaginar o seguinte cenário:

Uma tabela com registros de reclamações e pra simplificar com colunas data, idReclamante.
Preciso controlar se há um período minimo entre as reclamações para ter noção de solução.

Tenho que identificar se existe reclamações do mesmo reclamante no período <= a 1 hora entre as reclamações. Ex.

id | idreclamante | data
1 100 20/04/2020 10:00
2 100 20/04/2020 10:30
3 100 20/04/2020 12:00
4 200 20/04/2020 09:00
5 200 20/04/2020 12:00

Fazendo um select nesta tabela, teria que trazer como resultado somente as 2 primeiras linhas.
Acredito que tenha transformar linhas em colunas mas deu uma bugada na lógica aqui....
Alguém tem o caminho das pedras?
Obrigado t+
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

Acho que você pode usar ANALYTIC FUNCTIONS pra isso.
Mais precisamente LEAD and LAG.

Veja esse exemplo:

Selecionar tudo

SELECT ename,hiredate,sal,
LAG(sal, 1, 0) 
  OVER (ORDER BY hiredate) AS PrevSal
FROM emp
WHERE job = 'CLERK';


Ename  Hired       SAL PREVSAL
------ --------- ----- -------
SMITH  17-DEC-80   800       0
JAMES  03-DEC-81   950     800
MILLER 23-JAN-82  1300     950
ADAMS  12-JAN-83  1100    1300
Repare que ele pega o valor da linha ANTERIOR. (950, 800). (1300, 950), etc.
Ou seja, basta você pegar a diferença desses dois valores.
E depois filtrar quando a diferença for menor que 1 hora.
Det
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 16
Registrado em: Sex, 20 Dez 2019 2:29 pm

Perfeito, vou testar.
Obrigado pelo retorno
Responder
  • Informação
  • Quem está online

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