# FirstSortedValue — функция скрипта

Функция FirstSortedValue() возвращает значение из выражения, указанного в элементе value, связанном с результатом сортировки аргумента sort\_weight, учитывая элемент rank, если он указан. Если в результате больше одного значения имеют один и тот же элемент sort\_weight для указанного элемента rank, функция возвращает значение 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 | При указании для элемента rank значения «n» выше 1 будет получено 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

| Поле результата (Customer) | Значение результата (MyProductWithSmallestOrderByCustomer) |
| --- | --- |
| Astrida | CC |
| Betacab | AA |
| Canutility | AA |
| Divadip | DD |

Функция выполняет сортировку значений UnitSales от наименьших к наибольшим, выполняя поиск значения параметра Customer с наименьшим значением параметра UnitSales (наименьший заказ).

В связи с этим элемент CC соответствует значению наименьшего заказа (значение параметра UnitSales=2) для клиента Astrida. Элемент AA соответствует наименьшему заказу (4) для клиента Betacab, элемент AA соответствует наименьшему заказу (8) для клиента Canutility, а элемент DD соответствует наименьшему заказу (10) для клиента Divadip.

Пример 2:

При условии, что таблица Temp загружается, как в предыдущем примере:

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

Результаты примера 2

| Поле результата (Customer) | Значение результата (MyProductWithLargestOrderByCustomer) |
| --- | --- |
| Astrida | AA |
| Betacab | DD |
| Canutility | CC |
| Divadip | - |

Аргументу sort\_weight предшествует знак минуса, поэтому с помощью функции элементы будут отсортированы от наибольших к наименьшим.

Поскольку элемент AA соответствует наибольшему заказу (значение UnitSales:18) для клиента Astrida, элемент DD соответствует наибольшему заказу (12) для клиента Betacab, и элемент CC соответствует наибольшему заказу (13) для клиента Canutility. Существуют два одинаковых значения для наибольшего заказа (16) клиента Divadip, поэтому будет сформирован нулевой результат.

Пример 3:

При условии, что таблица Temp загружается, как в предыдущем примере:

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

Результаты примера 3

| Поле результата (Customer) | Значение результата (MyProductWithLargestOrderByCustomer) |
| --- | --- |
| Astrida | AA |
| Betacab | DD |
| Canutility | CC |
| Divadip | AA |

Все действия будут выполняться так же, как и в предыдущем примере, но будет использоваться префикс distinct. При этом результат дубликата для Divadip будет проигнорирован, что позволит вернуть ненулевое значение.