sql >> Database >  >> RDS >> Oracle

Sequentiehiaten in een tabel in Oracle vinden

Op zoek naar hiaten in de volgorde in een tabel in Oracle

Probleem
U wilt alle gaten in de reeks getallen of datums en tijden in uw gegevens vinden. De hiaten kunnen
zijn in datums die zijn vastgelegd voor een bepaalde actie, of in andere gegevens met een logisch opeenvolgend karakter.
Oplossing
Met de LAG- en LEAD OLAP-functies van Oracle kunt u de huidige rij resultaten vergelijken met een voorgaande rij.
De algemene indeling van LAG ziet er als volgt uit
Lag (kolom of uitdrukking, offset van voorgaande rij, standaard voor eerste rij)
De kolom of uitdrukking is de waarde die moet worden vergeleken met achterblijvende (voorafgaande) waarden. De vorige
rij-offset geeft aan tegen hoeveel rijen voorafgaand aan de huidige rij de LAG moet optreden. We hebben '1' in
de volgende lijst gebruikt om de rij aan te duiden die voorafgaat aan de huidige rij. De standaardwaarde voor LAG geeft aan welke
waarde moet worden gebruikt als precedent voor de eerste rij, aangezien er geen rij nul is in een tabel of resultaat. We instrueren Oracle
om 0 te gebruiken als de standaard ankerwaarde, om het geval af te handelen waarin we zoeken naar de dag voorafgaand aan de
maand.
De WITH-query-aliasbenadering kan worden gebruikt in bijna alle situaties waarin een subquery wordt gebruikt, om
de details van de subquery te verplaatsen voor de hoofdquery. Dit bevordert de leesbaarheid en refactoring van de code indien
op een later tijdstip vereist.
Dit recept zoekt naar gaten in de reeks dagen waarop bestellingen werden gedaan voor de maand
november 1999:

met verkoopdagen als
(select extract(day from order_date) next_sale,
lag(extract(day from order_date),1,0)
over (bestel op extract(day from order_date)) prev_sale
van oe.orders
waar besteldatum tussen '01-NOV-1999' en '30-NOV-1999')
selecteer prev_sale, next_sale
van verkoopdagen
waar next_sale - prev_sale> 1
bestel op prev_sale;
Onze zoekopdracht onthult de hiaten, in dagen, tussen verkopen voor de maand november 1999.

PREV_SALE NEXT_SALE
---------- ----------
1 10
10 14
15 19
20 22
De resultaten geven aan dat nadat een bestelling was geregistreerd op de eerste van de maand, er geen volgende bestelling werd geregistreerd
tot de 10e. Daarna volgde een onderbreking van vier dagen tot de 14e, enzovoort. Een scherpzinnige verkoopmanager
zou deze gegevens kunnen gebruiken om te vragen wat het verkoopteam op die tussendagen aan het doen was, en waarom er geen bestellingen binnenkwamen
die binnenkwamen!

  1. Toegang tot MySQL-poorten beperken?

  2. Een kop- en voettekst toevoegen aan een rapport in Microsoft Access

  3. PostgreSQL:prestatie pg_dump, pg_restore verbeteren

  4. Schema Switch-A-Roo:deel 2