最近のアクセス:
Max 式、Min 式

Max 式と Min 式は、Aggregate 式 (集計式) です。

構文

{Max | Min}( <expressionToBeMaxOrMin>, <aggregateCondition>, <defaultValue> , <returnedAttributeValue> ) [ if <triggeringCondition> ]
入力値の説明:
<expressionToBeMaxOrMin>
<aggregateCondition> を満たすレコードのなかで、最小値または最大値を返すエクスプレッションです。項目属性 (計算式の項目属性でもかまいません)、定数、変数を含めることができます (変数はインライン式内でのみ使用できます)。
<aggregateCondition>
検索条件と Data Selector の呼び出しを組み合わせたものです。検索条件および Data Selector はオプションです:
[ <SearchCondition> ] [ USING <DataSelector> '(' <パラメーター>1, <パラメーター>2, <パラメーター>n ')' ]
<SearchCondition>
レコードを総計に含める場合、このレコードが満たす必要のある条件です。項目属性、定数、変数を含めることができます (ユーザー変数はインライン式のみ、GeneXus の標準変数はグローバル式とインライン式のみで使用できます)。 
<defaultValue>
<aggregateCondition> に一致するレコードがない場合に返される値です。これは定数であり、オプションです。
<returnedAttributeValue>
<aggregateCondition> を満たすレコードが見つかった場合に、<expressionToBeMaxOrMin> の最大値/最小値を求めた後に、式によって値が返される項目属性です。
<triggeringCondition>
式をトリガーする必要があるかどうかを判別する条件です。これはオプションです。使用できるのは、コンテキストテーブルに属する項目属性 (格納された場合に式項目属性が属するもの) とその拡張項目属性だけです。

次のような 2 つのトランザクションがあるとします: フライトに関する全般的な情報 (説明や日時ごとの価格など) を格納する Flight、および特定のフライトの実際の情報を格納する FlightInstance: 
Flight {
       FlightId*
       FlightDescription
       Prices
          { FlightDate*
            FlightPrice }}

FlightInstance {
       FlightInstanceNumber*
       FlightId
       FlightDescription
       FlightInstanceDate
       FlightInstancePrice = max(FlightDate, FlightDate <= FlightInstanceDate, 0, FlightPrice)}
次の図は、GeneXus の式エディターを使用して、グローバルな Max 式に FlightInstancePrice 項目属性を定義する方法を示します。
イメージ:5875.jpg
式のベーステーブル、つまり、計算を実行するためのナビゲート対象テーブルは次のテーブルです: FLIGHTPRICES。
この式には、FLIGHTINSTANCE テーブルというコンテキストがあります。つまり、式がトリガーされたときに、このテーブルにアクセスします。正確には、特定の FlightInstanceNumber 値を持つ 1 つのレコードにアクセスします。その結果、式が評価されるときには、このレコードの FLIGHTINSTANCE テーブル (およびその拡張テーブル) のすべての項目属性が既知になっています。そのような項目属性のなかには、FlightIdFlightInstanceDate があります。
そのため、最大値を求める際、明示的な集計条件「FlightDate <= FlightInstanceDate」を満たすレコードのすべてが考慮の対象となるわけではありません。対象フライト、つまり、その FLIGHTINSTANCE レコードの FlighId に対応するレコードのみが考慮されます。
そして、考慮対象となるすべてのレコードで、次の式が検証されます: FLIGHTPRICES.FlightId = FLIGHTINSTANCE.FlightId
まとめると、Max 式によって、<aggregateCondition> (FlightDate <= FlightInstanceDate) を検証するレコードをフィルタリングする FLIGHTPRICES テーブルがナビゲートされ、さらに GeneXus によって推論された自動フィルタ (FLIGHTINSTANCE.FlightId = FLIGHTPRICES.FlightId) が適用されます。その後、上記の両方のフィルタを満たすレコードを対象として <expressionToBeMaxOrMin> の最大値が求められます (つまり、FlightDate の最大値を持つレコードが選択されます)。そして、このレコードに関連付けられた <returnedAttributeValue> が、式の結果として返されます (FlightPrice)。両方のフィルタを満たすレコードが存在しない場合、0 (<defaultValue>) が返されます。








サブページ
Created: 14/09/18 03:19 by Admin Last update: 22/03/14 00:52 by Admin
カテゴリ
Powered by GXwiki 3.0