ROW_NUMBER
Omschrijving
ROW_NUMBER
is een aggregatiefunctie voor vensters die rijen partitioneert in groepen, rijen ordent op een veld en een uniek volgnummer toewijst aan elke rij in een groep, te beginnen bij 1 voor de eerste rij in elke groep. ROW_NUMBER
wijst altijd een unieke waarde toe aan elke rij in een groep. Misschien wilt u ROW_NUMBER
om een unieke ID te maken voor elke rij in uw gegevensset.De
PARTITION BY
bepaalt welke velden moeten worden gebruikt om een set invoerrijen in groepen te partitioneren.De
ORDER BY
bepaalt hoe de rijen in de partitie moeten worden gerangschikt voordat ze een volgnummer krijgen. De invoerrijen worden in groepen gescheiden in groepen op basis van de partitioneringsvelden, de rijen worden geordend op basis van de volgordevelden en berekent vervolgens de aggregatieexpressie (rijnummering voor deze functie) in elke groep. De genummerde rijen in elke groep beginnen bij 1.
Syntaxis
ROW_NUMBER()OVER(PARTITION BYpartitioning_field[,partitioning_field]ORDER BYordering_field[ASC | DESC] [,ordering_field[ASC | DESC]] )
Retourwaarde
Retourneert een waarde van het type
INTEGER
.Invoerparameters
- OVER()
- Vereist.OVERmoet worden gebruikt binnen aROW_NUMBERexpressie.
- PARTITION BYpartitioning_field
- Vereist. De . gebruikenPARTITION BYom een of meer velden op te geven voor het partitioneren van een groep invoerrijen. U kunt elk veldtype opgeven, behalve Valuta. Voorbeeld: u geeft het veld Maand op als het partitioneringsveld, zodat alle records met dezelfde waarde voor Maand in Workday worden gegroepeerd in één partitie.
- ORDER BYordering_field
- Vereist. De . gebruikenORDER BYom op te geven hoe de invoerrijen in de partitie moeten worden geordend met behulp van de waarden in het opgegeven veld binnen elke partitie. U kunt elk veldtype opgeven, behalve Valuta.U kunt de gebruikenDESCofASCtrefwoorden om te sorteren in aflopende volgorde (van hoge naar lage waarden, NULL-waarden zijn laatste) of oplopende volgorde (van lage naar hoge waarden, NULL-waarden zijn eerst) voor elk bestelveld. Als u geen sorteervolgorde voor een bestelveld opgeeft, worden de rijen automatisch in oplopende volgorde gesorteerd.
Voorbeelden
Voorbeeld: u hebt een gegevensset met deze rijen en velden.
Werknemer | Verkoopdatum | Verkoop |
|---|---|---|
Goho | 31-12-2018 | 140 |
Goho | 30-11-2018 | 60 |
Goho | 31-10-2018 | 140 |
Freeman | 31-12-2018 | 160 |
Freeman | 30-11-2018 | 60 |
Freeman | 31-10-2018 | 110 |
Smit | 31-12-2018 | 140 |
Smit | 30-11-2018 | 60 |
Smit | 31-10-2018 | 120 |
U kunt een unieke ID toewijzen aan de verkopen van elke werknemer in aflopende volgorde, zodat de hoogste verkopen de rangorde van 1 krijgen. Gebruik deze expressie in het veld
Verkoopnummer op werknemer
:ROW_NUMBER() OVER( PARTITION BY [Employee] ORDER BY [Sales] DESC)
U krijgt de volgende resultaten:
Werknemer | Verkoopdatum | Verkoop | Aantal verkopen op werknemer |
|---|---|---|---|
Goho | 31-12-2018 | 140 | 1 |
Goho | 31-10-2018 | 140 | 2 |
Goho | 30-11-2018 | 60 | 3 |
Freeman | 31-12-2018 | 160 | 1 |
Freeman | 31-10-2018 | 110 | 2 |
Freeman | 30-11-2018 | 60 | 3 |
Smit | 31-12-2018 | 140 | 1 |
Smit | 31-10-2018 | 120 | 2 |
Smit | 30-11-2018 | 60 | 3 |
U kunt ook een unieke ID toewijzen aan de verkopen voor elke datum in aflopende volgorde, zodat de hoogste verkopen de rangorde van 1 krijgen. Gebruik deze expressie in het veld
Verkoopaantal op datum
:ROW_NUMBER() OVER( PARTITION BY [Sales Date] ORDER BY [Sales] DESC)
U krijgt de volgende resultaten:
Werknemer | Verkoopdatum | Verkoop | Aantal verkopen op datum |
|---|---|---|---|
Freeman | 31-12-2018 | 160 | 1 |
Goho | 31-12-2018 | 140 | 2 |
Smit | 31-12-2018 | 140 | 3 |
Goho | 30-11-2018 | 60 | 1 |
Freeman | 30-11-2018 | 60 | 2 |
Smit | 30-11-2018 | 60 | 3 |
Goho | 31-10-2018 | 140 | 1 |
Smit | 31-10-2018 | 120 | 2 |
Freeman | 31-10-2018 | 110 | 3 |
U kunt ook . gebruiken
ROW_NUMBER
om de laatste versie te bepalen van elke rij in een gegevensset die meerdere rijen per ID bevat. In dit scenario is voor de gegevensset een datumveld vereist dat aangeeft wanneer de informatie in die rij actueel is geworden. Als u bekend bent met datawarehousingconcepten: dit is een langzaam veranderende dimensietabel van type 2. U hebt een gegevensset met deze rijen en velden.ID | Naam | Regio | Ingangsdatum |
|---|---|---|---|
G1 | Gorman | West | 01-01-2015 |
H1 | Harris | West | 01-01-2015 |
G1 | Gorman | Oost | 01-09-2016 |
H1 | Harris | Oost | 03-01-2017 |
H1 | Harris | Nationaal | 20-01-2021 |
Als u de waarde 1 wilt toewijzen aan de laatste versie van elke ID, gebruikt u deze expressie in het veld
Laatste versie
:ROW_NUMBER() OVER( PARTITION BY [ID] ORDER BY [Effective Date] DESC)
U krijgt de volgende resultaten:
ID | Naam | Regio | Ingangsdatum | Meest recente versie |
|---|---|---|---|---|
G1 | Gorman | West | 01-01-2015 | 2 |
H1 | Harris | West | 01-01-2015 | 3 |
G1 | Gorman | Oost | 01-09-2016 | 1 |
H1 | Harris | Oost | 03-01-2017 | 2 |
H1 | Harris | Nationaal | 20-01-2021 | 1 |
U kunt filteren op
de laatste versie
met behulp van een filterfase om alleen de laatste rij voor elke ID te retourneren.