# FirstSortedValue - 脚本函数

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

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

语法：

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

返回数据类型： 双

参数：

FirstSortedValue 参数

| 参数 | 说明 |
| --- | --- |
| value Expression | 此函数用于查找表达式 value 的值，相当于 sort\_weight 的排序结果。 |
| sort-weight Expression | 该表达式包含要排序的数据。找到 sort\_weight 的第一个（最低）值，由 value 表达式的对应值确定。如果在 sort\_weight 前面加一个减号，则此函数会返回最后一个（最高）排序值。 |
| rank Expression | 通过指定一个大于 1 的 rank “n”，您会获得第 n 个排序值。 |
| distinct | 如果在函数参数前出现单词 DISTINCT，则将忽略计算该函数参数生成的副本。 |

示例和结果：

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

示例 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;
`

示例 1 结果

| 结果字段（客户） | 结果值 (MyProductWithSmallestOrderByCustomer) |
| --- | --- |
| Astrida | CC |
| Betacab | AA |
| Canutility | AA |
| Divadip | DD |

函数将 UnitSales 按从最小到最大的顺序排列，通过UnitSales 的最小值（最小顺序）寻找 Customer 的值。

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

示例 2:

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

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

示例 2 结果

| 结果字段（客户） | 结果值 (MyProductWithLargestOrderByCustomer) |
| --- | --- |
| Astrida | AA |
| Betacab | DD |
| Canutility | CC |
| Divadip | - |

减号位于 sort\_weight 参数之首，因此，该函数将最大的排在第一个。

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

示例 3:

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

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

示例 3 结果

| 结果字段（客户） | 结果值 (MyProductWithLargestOrderByCustomer) |
| --- | --- |
| Astrida | AA |
| Betacab | DD |
| Canutility | CC |
| Divadip | AA |

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