# FirstSortedValue スクリプト関数

FirstSortedValue() は、value で指定した数式から値を返します。これは、単価が最も低い製品の名前など、sort\_weight 引数のソート結果に対応します。rank では、ソート順の n 番目の値を指定できます。指定された 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:` `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;<br>` | ` Customer MyProductWithSmallestOrderByCustomer  ` `Astrida CC` `Betacab AA` `Canutility AA` `Divadip DD`<br><br>この関数は UnitSales を小さい順にソートし、UnitSales の値が最小 (もっとも小さい順序) となる Customer の値を検索します。<br><br>なぜなら、CC は顧客 Astrida にとって最小注文 (UnitSales の値=2) に相当するからです。AA は顧客 Betacab の最小注文 (4)、AA は顧客 Canutility の最小注文 (8)、DD は顧客 Divadip. の最小注文 (10) に相当します。 |
| Temp テーブルが前の例のようにロードされた場合:<br><br>`LOAD  Customer,FirstSortedValue(Product, -UnitSales) as MyProductWithLargestOrderByCustomer Resident Temp Group By Customer;` | ` Customer MyProductWithLargestOrderByCustomer  ` `Astrida AA` `Betacab DD` `Canutility CC` `Divadip -`<br><br>sort\_weight 引数の前にマイナス記号を付けると、最大値から順にソートされます。<br><br>AA は顧客 Astrida の最大注文 (UnitSales の値:18)、DD は顧客 Betacab の最大注文 (12)、CC は顧客 Canutility の最大注文 (13) に相当します。顧客 Divadip の最大注文は 2 つの同じ値 (16) を持つため、結果は NULL となります。 |
| Temp テーブルが前の例のようにロードされた場合:<br><br>`LOAD  Customer,FirstSortedValue(distinct Product, -UnitSales) as MyProductWithSmallestOrderByCustomer Resident Temp Group By Customer;` | ` Customer MyProductWithLargestOrderByCustomer  ` `Astrida AA` `Betacab DD` `Canutility CC` `Divadip AA`<br><br>distinct 修飾子が使用されている点を除くと、前の例と同じ結果になります。この場合は Divadip の結果が重複して無視され、NULL 以外の値を返すことができるようになります。 |