ROW_NUMBER
Descrição
ROW_NUMBER
é uma função de agregação de janela que divide as linhas em grupos, as ordena por um campo e atribui um número sequencial exclusivo a cada linha em um grupo, começando em 1 para a primeira linha em cada grupo. ROW_NUMBER
sempre atribui um valor exclusivo a cada linha em um grupo. Você pode usar ROW_NUMBER
para criar uma ID exclusiva para cada linha no seu conjunto de dados.O
PARTITION BY
A cláusula determina quais campos usar para dividir um conjunto de linhas de entrada em grupos.O
ORDER BY
A cláusula determina como as linhas na partição antes de receber um número sequencial. O Workday separa as linhas de entrada em grupos de acordo com os campos de particionamento, ordena as linhas de acordo com os campos de ordenação e calcula a expressão de agregação (numeração das linhas para essa função) em cada grupo. As linhas numeradas em cada grupo começam em 1.
Sintaxe
ROW_NUMBER()OVER(PARTITION BYpartitioning_field[,partitioning_field]ORDER BYordering_field[ASC | DESC] [,ordering_field[ASC | DESC]] )
Valor de retorno
Retorna um valor do tipo
INTEGER
.Parâmetros de entrada
- OVER()
- Obrigatório.OVERdeve ser usado em um período deROW_NUMBERexpressão.
- PARTITION BYpartição_field
- É obrigatório. Use as teclasPARTITION BYPara especificar um ou mais campos a serem usados para particionar um grupo de linhas de entrada. Você pode especificar qualquer tipo de campo, exceto Moeda. Exemplo: você especifica o campo Mês como o campo de partição, para que o Workday agrupe em uma única partição todos os registros que têm o mesmo valor para Mês.
- ORDER BYorder_field
- É obrigatório. Use as teclasORDER BYpara especificar como ordenar as linhas de entrada na partição usando os valores no campo especificado dentro de cada partição. Você pode especificar qualquer tipo de campo, exceto Moeda.Você pode usar o botãoDESCouASCPalavras-chave para classificar em ordem decrescente (valores do mais alto para o menor, valores NULL são os últimos) ou crescente (valores do menor para o maior, valores NULL são os primeiros) para cada campo de ordenação. Se você não especifica uma ordem de classificação para um campo de ordenação, o Workday classifica as linhas automaticamente em ordem crescente.
Exemplos
Exemplo: você tem um conjunto de dados com essas linhas e campos.
Colaborador | Data de venda | 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 |
Você pode atribuir uma ID exclusiva às vendas de cada colaborador em ordem decrescente, de forma que as vendas mais altas recebam a classificação 1. Use esta expressão no campo
Número de vendas por colaborador
:ROW_NUMBER() OVER( PARTITION BY [Employee] ORDER BY [Sales] DESC)
Você obtém estes resultados:
Colaborador | Data de venda | Sales | Número de vendas por colaborador |
|---|---|---|---|
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 |
Você também pode atribuir uma ID exclusiva às vendas de cada data em ordem decrescente, de forma que as vendas mais altas recebam a classificação 1. Use esta expressão no campo
Número de vendas por data
:ROW_NUMBER() OVER( PARTITION BY [Sales Date] ORDER BY [Sales] DESC)
Você obtém estes resultados:
Colaborador | Data de venda | Sales | Número de vendas por data |
|---|---|---|---|
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 |
Você também pode usar
ROW_NUMBER
para determinar a versão mais recente de cada linha em um conjunto de dados que contém várias linhas por ID. Neste cenário, o conjunto de dados requer um campo de data que represente quando as informações nessa linha se tornaram atuais. Se você conhece os conceitos de armazenamento de dados, essa é uma tabela de dimensão de tipo 2, que muda lentamente. Você tem um conjunto de dados com essas linhas e campos.ID | Name | Região | Data de vigência |
|---|---|---|---|
G1 | Peso: . | Oeste | 01/01/2015 |
H1 | Harris | Oeste | 01/01/2015 |
G1 | Peso: . | East | 09/01/2016 |
H1 | Harris | East | 01/03/2017 |
H1 | Harris | Nacional | 01/20/2021 |
Para atribuir o valor 1 à versão mais recente de cada ID, use esta expressão no campo
Versão mais recente
:ROW_NUMBER() OVER( PARTITION BY [ID] ORDER BY [Effective Date] DESC)
Você obtém estes resultados:
ID | Name | Região | Data de vigência | Última versão |
|---|---|---|---|---|
G1 | Peso: . | Oeste | 01/01/2015 | 2 |
H1 | Harris | Oeste | 01/01/2015 | 3 |
G1 | Peso: . | East | 09/01/2016 | 1 |
H1 | Harris | East | 01/03/2017 | 2 |
H1 | Harris | Nacional | 01/20/2021 | 1 |
Você pode filtrar pela
Última versão
usando uma Fase de filtro para retornar apenas a linha mais recente para cada ID.