FirstSortedValue — функция скрипта
Функция FirstSortedValue() возвращает значение из выражения, указанного в элементе value, связанном с результатом сортировки аргумента sort_weight, учитывая элемент rank, если он указан. Если в результате больше одного значения имеют один и тот же элемент sort_weight для указанного элемента rank, функция возвращает значение NULL.
Сортированные значения повторяются в количестве записей, как указано в предложении group by или агрегируются во всем наборе данных, если предложение group by не указано.
Синтаксис:
Возвращаемые типы данных: двойное значение
Аргументы:
Аргумент | Описание |
---|---|
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;
Поле результата (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;
Поле результата (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;
Поле результата (Customer) | Значение результата (MyProductWithLargestOrderByCustomer) |
---|---|
Astrida | AA |
Betacab | DD |
Canutility | CC |
Divadip | AA |
Все действия будут выполняться так же, как и в предыдущем примере, но будет использоваться префикс distinct. При этом результат дубликата для Divadip будет проигнорирован, что позволит вернуть ненулевое значение.