FirstSortedValue - 脚本函数

FirstSortedValue()返回在 value 中指定的表达式的值,该值与 sort_weight 参数的排序结果对应,如果指定,还要考虑rank。如果在指定 rank下多个结果值共享同一 sort_weight,则此函数返回 NULL

排序的值会迭代于 group by子句定义的大量记录,或者如果 group by 子句未定义,就会在整个数据集之间聚合。

语法:  

FirstSortedValue ([ distinct ] value, sort-weight [, rank ])

返回数据类型: dual

参数:  

参数 说明
value Expression 此函数用于查找表达式 value的值,相当于 sort_weight 的排序结果。
sort-weight Expression 该表达式包含要排序的数据。找到 sort_weight的第一个(最低)值,由value 表达式的对应值确定。如果在 sort_weight前面加一个减号,则此函数会返回最后一个(最高)排序值。
rank Expression

通过指定一个大于 1 的 rank“n”,您会获得第 n 个排序值。

distinct

如果在函数参数前出现单词 DISTINCT,则将忽略计算该函数参数生成的副本。

示例和结果:  

将示例脚本添加到文档并运行。然后,至少要将结果列中列出的字段添加到文档中的表格才能查看结果。

示例 结果
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;

Customer MyProductWithSmallestOrderByCustomer

Astrida CC

Betacab AA

Canutility AA

Divadip DD

函数将 UnitSales按从最小到最大的顺序排列,通过UnitSales 的最小值(最小顺序)寻找 Customer 的值。

因为 CC与客户 Astrida 的最小顺序(UnitSales 的值 = 2)对应。AA与客户 Betacab 的最小顺序 (4) 对应,CC 与客户 Canutility 的最小顺序 (8) 对应,而 DD 与客户 Divadip. 的最小顺序 (10) 对应。

前提是 Temp表格像之前的示例一样加载:

LOAD Customer,FirstSortedValue(Product, -UnitSales) as MyProductWithLargestOrderByCustomer Resident Temp Group By Customer;

Customer MyProductWithLargestOrderByCustomer

Astrida AA

Betacab DD

Canutility CC

Divadip -

减号位于 sort_weight参数之首,因此,该函数将最大的排在第一个。

因为 AA与客户 Astrida 的最大顺序(UnitSales 的值:18)对应,DD 与客户 Betacab 的最大顺序 (12) 对应,而 CC 与客户Canutility 的最大顺序 (13) 对应。客户 Divadip的最大顺序 (16) 有两个相同的值,因此,它会生成空结果。

前提是 Temp表格像之前的示例一样加载:

LOAD Customer,FirstSortedValue(distinct Product, UnitSales) as MyProductWithSmallestOrderByCustomer Resident Temp Group By Customer;

Customer MyProductWithLargestOrderByCustomer

Astrida AA

Betacab DD

Canutility CC

Divadip AA

这一点与之前的示例相同,使用了distinct限定符除外。在该子句中,Divadip的重复结果会被忽略,从而允许返回非空值。