Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Encontrando lacunas de sequência em uma tabela no Oracle

Encontrando lacunas de sequência em uma tabela no Oracle

Problema
Você deseja encontrar todas as lacunas na sequência de números ou em datas e horas em seus dados. As lacunas podem
estar em datas registradas para uma determinada ação ou em alguns outros dados com natureza logicamente consecutiva.
Solução
As funções LAG e LEAD OLAP do Oracle permitem comparar a linha atual de resultados com uma linha anterior.
O formato geral do LAG é assim
Lag (coluna ou expressão, deslocamento da linha anterior, padrão para a primeira linha)
A coluna ou expressão é o valor a ser comparado com valores atrasados ​​(anteriores). O deslocamento de
linha anterior indica em quantas linhas anteriores à linha atual o LAG deve agir. Usamos '1'
na listagem a seguir para significar a linha anterior à linha atual. O padrão para LAG indica qual
valor deve ser usado como precedente para a primeira linha, pois não há linha zero em uma tabela ou resultado. Instruímos o Oracle
a usar 0 como o valor âncora padrão, para lidar com o caso em que procuramos o dia anterior ao
primeiro do
mês.
A abordagem de alias de consulta WITH pode ser usada em quase todas as situações em que uma subconsulta é usada,
realoque os detalhes da subconsulta antes da consulta principal. Isso ajuda a legibilidade e refatoração do código se
necessário em uma data posterior.
Esta receita procura lacunas na seqüência de dias em que os pedidos foram feitos para o mês de
novembro de 1999:
com salesdays como
(selecione extrato(day from order_date) next_sale,
lag(extract(day from order_date),1,0)
over (pedido por extrato(day from order_date)) prev_sale
de oe.orders
onde order_date entre '01-NOV-1999' e '30-NOV-1999')
selecione prev_sale, next_sale
de salesdays
where next_sale - prev_sale> 1
pedir por prev_sale;
Nossa consulta expõe os intervalos, em dias, entre as vendas do mês de novembro de 1999.

PREV_SALE PRÓXIMA_VENDA
---------- ----------
1 10
10 14
15 19
20 22
Os resultados indicam que após um pedido ser registrado no primeiro dia do mês, nenhum pedido subsequente
foi registrado até o dia 10. Em seguida, seguiu-se um intervalo de quatro dias até o 14º e assim por diante. Um gerente de vendas astuto
poderia usar esses dados para perguntar o que a equipe de vendas estava fazendo naqueles dias de folga e por que nenhum pedido
entrou!