ROW_NUMBER
Description
ROW_NUMBER
est une fonction d'agrégation de fenêtre qui répartit les lignes en groupes, trie les lignes en fonction d'un champ et attribue un numéro séquentiel unique à chaque ligne d'un groupe, en commençant par 1 pour la première ligne de chaque groupe. ROW_NUMBER
affecte toujours une valeur unique à chaque ligne d'un groupe. Vous pouvez utiliser ROW_NUMBER
afin de créer un identifiant unique pour chaque ligne de votre jeu de données.Le
PARTITION BY
La clause d'entrée détermine les champs à utiliser pour répartir un ensemble de lignes d'entrée en groupes.Le
ORDER BY
La clause . Workday sépare les lignes d'entrée en groupes en fonction des champs de partition, trie les lignes en fonction des champs de tri, puis calcule l'expression d'agrégation (numéro de ligne pour cette fonction) dans chaque groupe. Les lignes numérotées de chaque groupe commencent à 1.
Syntaxe
ROW_NUMBER()OVER(PARTITION BYpartitioning_field[,partitioning_field]ORDER BYordering_field[ASC | DESC] [,ordering_field[ASC | DESC]] )
Valeur de renvoi
Renvoie une valeur de type
INTEGER
.Paramètres d'entrée
- OVER()
- Obligatoire.OVERdoit être utilisé dans un calendrierROW_NUMBERexpression.
- PARTITION BYpartitioning_field
- Est obligatoire. Utilisez l'optionPARTITION BYclause pour spécifier un ou plusieurs champs à utiliser pour partitionner un groupe de lignes d'entrée. Vous pouvez indiquer n'importe quel type de champ sauf Devise. Exemple : si vous spécifiez le champ Mois comme champ de partitionnement, Workday regroupe donc dans une partition unique tous les enregistrements ayant la même valeur pour Mois.
- ORDER BYordering_field
- Est obligatoire. Utilisez l'optionORDER BYclause pour indiquer comment trier les lignes d'entrée dans la partition en utilisant les valeurs du champ spécifié dans chaque partition. Vous pouvez indiquer n'importe quel type de champ sauf Devise.Vous pouvez utiliser laDESCouASCMots-clés pour trier par ordre décroissant (valeurs de haut à bas, les valeurs NULL sont les dernières) ou par ordre croissant (valeurs de basse à haute, les valeurs NULL sont les premières) pour chaque champ de tri. Si vous n'indiquez aucun ordre de tri pour un champ de tri, Workday trie automatiquement les lignes par ordre croissant.
Exemples
Exemple : vous disposez d'un jeu de données avec les lignes et les champs suivants.
Salarié | Date de vente | Ventes |
|---|---|---|
Goh | 12/31/2018 | 140 |
Goh | 11/30/2018 | 60 |
Goh | 10/31/2018 | 140 |
Freeman | 12/31/2018 | 160 |
Freeman | 11/30/2018 | 60 |
Freeman | 10/31/2018 | 110 |
Smith | 12/31/2018 | 140 |
Smith | 11/30/2018 | 60 |
Smith | 10/31/2018 | 120 |
Vous pouvez affecter un identifiant unique aux ventes de chaque salarié dans l'ordre décroissant, de sorte que les ventes les plus élevées soient classées 1. Utilisez l'expression suivante dans le champ
Nombre de ventes par salarié
:ROW_NUMBER() OVER( PARTITION BY [Employee] ORDER BY [Sales] DESC)
Vous obtenez les résultats suivants :
Salarié | Date de vente | Ventes | Montant des ventes par salarié |
|---|---|---|---|
Goh | 12/31/2018 | 140 | 1 |
Goh | 10/31/2018 | 140 | 2 |
Goh | 11/30/2018 | 60 | 3 |
Freeman | 12/31/2018 | 160 | 1 |
Freeman | 10/31/2018 | 110 | 2 |
Freeman | 11/30/2018 | 60 | 3 |
Smith | 12/31/2018 | 140 | 1 |
Smith | 10/31/2018 | 120 | 2 |
Smith | 11/30/2018 | 60 | 3 |
Vous pouvez également attribuer un identifiant unique aux ventes pour chaque date dans l'ordre décroissant, de sorte que les ventes les plus élevées soient classées 1. Utilisez l'expression suivante dans le champ
Nombre de ventes par date
:ROW_NUMBER() OVER( PARTITION BY [Sales Date] ORDER BY [Sales] DESC)
Vous obtenez les résultats suivants :
Salarié | Date de vente | Ventes | Nombre de ventes par date |
|---|---|---|---|
Freeman | 12/31/2018 | 160 | 1 |
Goh | 12/31/2018 | 140 | 2 |
Smith | 12/31/2018 | 140 | 3 |
Goh | 11/30/2018 | 60 | 1 |
Freeman | 11/30/2018 | 60 | 2 |
Smith | 11/30/2018 | 60 | 3 |
Goh | 10/31/2018 | 140 | 1 |
Smith | 10/31/2018 | 120 | 2 |
Freeman | 10/31/2018 | 110 | 3 |
Vous pouvez également utiliser
ROW_NUMBER
afin de déterminer la dernière version de chaque ligne d'un jeu de données contenant plusieurs lignes par identifiant. Dans ce scénario, le jeu de données requiert un champ de date qui représente la date à laquelle les informations de cette ligne sont passées à jour. Si vous avez l'habitude des concepts d'entrepôt de données, il s'agit d'une table de dimensions à modification lente de type 2. Vous disposez d'un jeu de données avec les lignes et les champs suivants.Identifiant | Nom | Région | Date d'effet |
|---|---|---|---|
G1 | Gorman | Ouest | 01/01/2015 |
H1 | Trimestre | Ouest | 01/01/2015 |
G1 | Gorman | Est | 09/01/2016 |
H1 | Trimestre | Est | 01/03/2017 |
H1 | Trimestre | National | 01/20/2021 |
Pour affecter la valeur 1 à la dernière version de chaque identifiant, utilisez l'expression suivante dans le champ
Dernière version
:ROW_NUMBER() OVER( PARTITION BY [ID] ORDER BY [Effective Date] DESC)
Vous obtenez les résultats suivants :
Identifiant | Nom | Région | Date d'effet | Dernière version |
|---|---|---|---|---|
G1 | Gorman | Ouest | 01/01/2015 | 2 |
H1 | Trimestre | Ouest | 01/01/2015 | 3 |
G1 | Gorman | Est | 09/01/2016 | 1 |
H1 | Trimestre | Est | 01/03/2017 | 2 |
H1 | Trimestre | National | 01/20/2021 | 1 |
Vous pouvez filtrer sur
la dernière version
à l'aide d'une phase de filtre afin de renvoyer uniquement la dernière ligne pour chaque identifiant.