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

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

При указании для элемента rank значения «n» выше 1 будет получено 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 от наименьших к наибольшим, регистрируя значение параметра Customer с наименьшим значением параметра UnitSales, как наименьший заказ.

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

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

При условии, что таблица 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 будет проигнорирован, что позволит вернуть ненулевое значение.