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

Параметр FirstSortedValue() возвращает значение из выражения, указанного в элементе value. Значение элемента соответствует результату сортировки по аргументу sort\_weight, например, названию продукта с самой низкой стоимостью единицы. N-ное значение в порядке сортировки можно указать в rank. Если в результате больше одного значения имеют один и тот же элемент sort\_weight для указанного элемента rank, функция возвращает значение NULL. Сортированные значения повторяются в количестве записей, как указано в предложении group by, или агрегируются во всем наборе данных, если предложение group by не указано.

Синтаксис:

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

Возвращаемые типы данных: двойное значение

Аргументы:

Аргументы

| Аргумент | Описание |
| --- | --- |
| value Expression | С помощью функции можно найти значение выражения value, которое соответствует результату сортировки поля sort\_weight. |
| sort-weight Expression | Выражение, содержащее данные для сортировки. Обнаружено первое (нижнее) значение элемента sort\_weight, на основе которого определяется соответствующее значение выражения value. Если указать знак минуса перед элементом sort\_weight, функция вернет последнее (самое высокое) отсортированное значение. |
| rank Expression | При указании для элемента rank значения «n» выше 1 будет получено n-ое отсортированное значение. |
| distinct | Если слово DISTINCT указывается до аргументов функции, все дубликаты, возникшие в результате оценки аргументов функции, будут проигнорированы. |

Примеры и результаты:

Добавьте образец скрипта в свое приложение и запустите. Затем добавьте на лист приложения как минимум поля, указанные в столбце с результатами, чтобы увидеть результаты.

Чтобы столбец с результатами выглядел так же, как столбец с результатами ниже, на панели свойств в разделе «Сортировка» переключите параметр с «Авто» на «Пользовательский», а затем отмените выбор числовой сортировки и сортировки в алфавитном порядке.

Примеры написания скриптов

| Пример | Результат |
| --- | --- |
| `Temp:`<br>`LOAD * inline [`<br>`Customer\|Product\|OrderNumber\|UnitSales\|CustomerID`<br>`Astrida\|AA\|1\|10\|1`<br>`Astrida\|AA\|7\|18\|1`<br>`Astrida\|BB\|4\|9\|1`<br>`Astrida\|CC\|6\|2\|1`<br>`Betacab\|AA\|5\|4\|2`<br>`Betacab\|BB\|2\|5\|2`<br>`Betacab\|DD\|12\|25\|2`<br>`Canutility\|AA\|3\|8\|3`<br>`Canutility\|CC\|13\|19\|3`<br>`Divadip\|AA\|9\|16\|4`<br>`Divadip\|AA\|10\|16\|4`<br>`Divadip\|DD\|11\|10\|4`<br>`] (delimiter is '\|');`<br>` `<br>`FirstSortedValue:`<br>`LOAD  Customer,FirstSortedValue(Product, UnitSales) as MyProductWithSmallestOrderByCustomer Resident Temp Group By Customer;<br>` | ` Customer MyProductWithSmallestOrderByCustomer  `<br>`Astrida CC`<br>`Betacab AA`<br>`Canutility AA`<br>`Divadip DD`<br><br>Функция выполняет сортировку значений UnitSales от наименьшего к наибольшему элементу и ищет значение Customer, которому соответствует наименьшее значение UnitSales, то есть наименьший заказ.<br><br>В связи с этим элемент CC соответствует значению наименьшего заказа (значение параметра UnitSales=2) для клиента Astrida. Элемент AA соответствует наименьшему заказу (4) для клиента Betacab, элемент AA соответствует наименьшему заказу (8) для клиента Canutility, а элемент DD соответствует наименьшему заказу (10) для клиента Divadip.. |
| При условии, что таблица Temp загружается, как в предыдущем примере:<br><br>`LOAD  Customer,FirstSortedValue(Product, -UnitSales) as MyProductWithLargestOrderByCustomer Resident Temp Group By Customer;` | ` Customer MyProductWithLargestOrderByCustomer  `<br>`Astrida AA`<br>`Betacab DD`<br>`Canutility CC`<br>`Divadip -`<br><br>Аргументу sort\_weight предшествует знак минуса, поэтому с помощью функции элементы будут отсортированы от наибольших к наименьшим.<br><br>Поскольку элемент AA соответствует наибольшему заказу (значение UnitSales:18) для клиента Astrida, элемент DD соответствует наибольшему заказу (12) для клиента Betacab, и элемент CC соответствует наибольшему заказу (13) для клиента Canutility. Существуют два одинаковых значения для наибольшего заказа (16) клиента Divadip, поэтому будет сформирован нулевой результат. |
| При условии, что таблица Temp загружается, как в предыдущем примере:<br><br>`LOAD  Customer,FirstSortedValue(distinct Product, -UnitSales) as MyProductWithSmallestOrderByCustomer Resident Temp Group By Customer;` | ` Customer MyProductWithLargestOrderByCustomer  `<br>`Astrida AA`<br>`Betacab DD`<br>`Canutility CC`<br>`Divadip AA`<br><br>Все действия будут выполняться так же, как и в предыдущем примере, но будет использоваться префикс distinct. При этом результат дубликата для Divadip будет проигнорирован, что позволит вернуть ненулевое значение. |