ROW_NUMBER
Description
ROW_NUMBER
est une fonction d'agrégation de fenêtre qui partitionne les rangées en groupes, trie les rangées en fonction d'un champ et attribue un numéro séquentiel unique à chaque rangée d'un groupe, en commençant par 1 pour la première rangée de chaque groupe. ROW_NUMBER
affecte toujours une valeur unique à chaque rangée d'un groupe. Vous pouvez utiliser ROW_NUMBER
afin de créer un identifiant unique pour chaque rangée de votre jeu de données.La
PARTITION BY
La clause détermine quels champs utiliser pour partitionner un ensemble de rangées d'entrée en groupes.La
ORDER BY
La clause détermine comment classer les rangées dans la partition avant qu'un numéro séquentiel leur soit affecté. Workday sépare les rangées d'entrée en groupes en fonction des champs de partitionnement, trie les rangées en fonction des champs de classement, puis calcule l'expression d'agrégation (numérotation des rangées pour cette fonction) dans chaque groupe. Les rangées numérotées de chaque groupe commencent par 1.
Syntaxe
ROW_NUMBER()OVER(PARTITION BYpartitioning_field[,partitioning_field]ORDER BYordering_field[ASC | DESC] [,ordering_field[ASC | DESC]] )
Valeur de retour
Retourne une valeur de type
INTEGER
.Paramètres d'entrée
- OVER()
- Est obligatoire.OVERdoit être utilisé dans un délai d'unROW_NUMBERl'expression.
- PARTITION BYpartitioning_field
- Est obligatoire. Utilisez laPARTITION BYclause pour indiquer un ou plusieurs champs à utiliser pour partitionner un groupe de rangées d'entrée. Vous pouvez indiquer n’importe quel type de champ sauf Devise. Exemple : vous indiquez le champ Mois comme champ de partitionnement. Par conséquent, Workday regroupe dans une seule partition tous les enregistrements qui ont la même valeur pour le mois.
- ORDER BYordering_field
- Est obligatoire. Utilisez laORDER BYclause pour indiquer comment classer les rangées d'entrée dans la partition en utilisant les valeurs du champ précisé dans chaque partition. Vous pouvez indiquer n’importe quel type de champ sauf Devise.Vous pouvez utiliser leDESCouASCdes mots-clés à trier par ordre décroissant (les valeurs de haut à bas, les valeurs NULL sont les dernières) ou par ordre croissant (les valeurs de bas à hautes, les valeurs de NULL sont les premières) pour chaque champ de tri. Si vous ne précisez pas d’ordre de tri pour un champ de tri, Workday trie automatiquement les rangées par ordre croissant.
Exemples
Exemple : vous avez un jeu de données avec ces rangées et ces champs.
Employé | Date de vente | Sales |
|---|---|---|
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 attribuer un identifiant unique aux ventes de chaque employé par ordre décroissant, de sorte que les ventes les plus élevées se voient attribuer le classement de 1. Utilisez l’expression suivante dans le champ
Cumul des ventes par employé
:ROW_NUMBER() OVER( PARTITION BY [Employee] ORDER BY [Sales] DESC)
Vous obtenez les résultats suivants :
Employé | Date de vente | Sales | Montant des ventes par employé |
|---|---|---|---|
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 par ordre décroissant, de sorte que les ventes les plus élevées se voient attribuer le classement de 1. Utilisez l’expression suivante dans le champ
Report des ventes par date
:ROW_NUMBER() OVER( PARTITION BY [Sales Date] ORDER BY [Sales] DESC)
Vous obtenez les résultats suivants :
Employé | Date de vente | Sales | 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 rangée d'un jeu de données qui contient plusieurs rangées par identifiant. Dans ce scénario, le jeu de données nécessite un champ de date qui représente le moment où l’information de cette rangée est passée à jour. Si vous connaissez les concepts d’entreposage des données, il s’agit d’une table de dimensions à changement lent de type 2. Vous avez un jeu de données avec ces rangées et ces champs.Identifiant | Nom | Région | Date d’effet |
|---|---|---|---|
G1 | Gorman | West | 01/01/2015 |
H1 | Harris | West | 01/01/2015 |
G1 | Gorman | East | 09/01/2016 |
H1 | Harris | East | 01/03/2017 |
H1 | Harris | National | 01/20/2021 |
Pour affecter la valeur de 1 à la dernière version de chaque identifiant, utilisez l’expression suivante dans le champ
Version la plus récente
:ROW_NUMBER() OVER( PARTITION BY [ID] ORDER BY [Effective Date] DESC)
Vous obtenez les résultats suivants :
Identifiant | Nom | Région | Date d’effet | Version la plus récente |
|---|---|---|---|---|
G1 | Gorman | West | 01/01/2015 | 2 |
H1 | Harris | West | 01/01/2015 | 3 |
G1 | Gorman | East | 09/01/2016 | 1 |
H1 | Harris | East | 01/03/2017 | 2 |
H1 | Harris | National | 01/20/2021 | 1 |
Vous pouvez filtrer sur
Dernière version
à l’aide d’un stade de filtrage afin de ne renvoyer que la rangée la plus récente pour chaque identifiant.