FirstSortedValue - função de script
A função FirstSortedValue() retorna o valor da expressão especificada em value que corresponde ao resultado da classificação do argumento sort_weight, levando em consideração o rank, se especificado. Se mais de um valor resultante compartilhar o mesmo sort_weight para o rank, especificado, a função retorna NULL.
Os valores classificados são iterativos em número de registros, como definidos por uma cláusula group by, ou agregados em um conjunto de dados completo se nenhuma cláusula group by for definida.
Sintaxe:
Tipo de dados de retorno: dual
Argumentos:
Argumento | Descrição |
---|---|
value Expression | A função encontra o valor da expressão value que corresponde ao resultado de classificação sort_weight. |
sort-weight Expression | A expressão que contém os dados que serão classificados. O primeiro valor (mais baixo) de sort_weight é encontrado, a partir do qual o valor correspondente da expressão value é determinado. Ao colocar um sinal de menos na frente de sort_weight, a função retorna o último (mais alto) valor classificado em seu lugar. |
rank Expression |
Se for especificado um rank "n" maior que 1, será obtido o enésimo valor classificado. |
distinct |
Se a palavra DISTINCT aparecer antes dos argumentos de função, as duplicatas resultantes da avaliação dos argumentos de função serão ignoradas. |
Exemplos e resultados:
Adicione o script de exemplo ao seu documento e execute-o. Em seguida, adicione pelo menos os campos listados na coluna de resultados a um documento para ver o resultado.
Exemplo 1:
Temp:
LOAD * inline [
Customer|Product|OrderNumber|UnitSales|CustomerID
Astrida|AA|1|10|1
Astrida|AA|7|18|1
Astrida|BB|4|9|1
Astrida|CC|6|2|1
Betacab|AA|5|4|2
Betacab|BB|2|5|2
Betacab|DD|12|25|2
Canutility|AA|3|8|3
Canutility|CC|13|19|3
Divadip|AA|9|16|4
Divadip|AA|10|16|4
Divadip|DD|11|10|4
] (delimiter is '|');
FirstSortedValue:
LOAD Customer,FirstSortedValue(Product, UnitSales) as MyProductWithSmallestOrderByCustomer Resident Temp Group By Customer;
Campo de resultado (cliente) | Valor do resultado (MyProductWithSmallestOrderByCustomer) |
---|---|
Astrida | CC |
Betacab | AA |
Canutilidade | AA |
Divadip | DD |
A função classifica o UnitSales do menor para o maior, procurando o valor de Customer com o menor valor de UnitSales, o menor pedido.
Como CC corresponde ao menor valor de pedido (valor de UnitSales=2) para o cliente Astrida. AA corresponde ao menor pedido (4) para o cliente Betacab, AA corresponde ao menor pedido (8) para o clienteCanutility, e DD corresponde ao menor pedido (10) para o clienteDivadip.
Exemplo 2:
Dado que a tabela Temp é carregada como no exemplo anterior:
LOAD Customer,FirstSortedValue(Product, -UnitSales) as MyProductWithLargestOrderByCustomer Resident Temp Group By Customer;
Campo de resultado (cliente) | Valor do resultado (MyProductWithLargestOrderByCustomer) |
---|---|
Astrida | AA |
Betacab | DD |
Canutilidade | CC |
Divadip | - |
Um sinal de menor precede o argumento sort_weight, assim a função classifica primeiro o maior.
Porque AA corresponde ao maior pedido (valor de UnitSales:18) do cliente Astrida, DD corresponde ao maior pedido (12) do cliente Betacab e CC corresponde ao maior pedido (13) do cliente Canutility. Há dois valores idênticos no maior pedido (16) para o cliente Divadip, portanto, isso produz um resultado nulo.
Exemplo 3:
Dado que a tabela Temp é carregada como no exemplo anterior:
LOAD Customer,FirstSortedValue(distinct Product, -UnitSales) as MyProductWithSmallestOrderByCustomer Resident Temp Group By Customer;
Campo de resultado (cliente) | Valor do resultado (MyProductWithLargestOrderByCustomer) |
---|---|
Astrida | AA |
Betacab | DD |
Canutilidade | CC |
Divadip | AA |
É o mesmo que o exemplo anterior, exceto que o qualificador distinct é usado. Isso causa resultado duplicado para Divadip ser desconsiderado, permitindo que seja retornado um valor não nulo.