GROUP 句

GROUP 句を使用すると、イベントのグループを表す 1 つの通知が WMI によって生成されます。 代表的な通知は、__AggregateEvent システム クラスのインスタンスです。 __AggregateEvent システム クラスには、Representative プロパティと NumberOfEvents プロパティの 2 つが含まれます。 Representative プロパティは、WITHIN 句で指定したグループ化間隔の間に受信したいずれかのインスタンスが含まれる埋め込みオブジェクトです。 たとえば、インスタンス変更イベントを通知するために集計イベントが生成された場合、Representative には __InstanceModificationEvent クラスのインスタンスが 1 つ含まれます。 NumberOfEvents プロパティには、グループ化間隔の間に受信したイベントの数が含まれます。 グループ化間隔は、最初のイベントを受信した後に、WMI が同様のイベントを収集する期間を示します。

GROUP 句には、グループ化間隔を指定する WITHIN 句を含める必要があり、BY キーワードまたは HAVING キーワード、あるいはその両方を含めることができます。 GROUP 句は、次に示すように WHERE 句の後に配置します。

SELECT * FROM EventClass [WHERE property = value] 
    GROUP WITHIN interval [BY property_list]
    [HAVING NumberOfEvents operator integer]

EventClass 値は、イベントがメンバーになっているイベント クラスです。value は、通知が必要なプロパティの値です。 interval は、最初のイベントを受信した後のグループ間隔を表す符号なし整数です。 符号なし整数は秒数です。 property list は、イベント クラスに含まれる 1 つ以上のプロパティのコンマ区切りのリストであり、operator は任意の関係演算子です。integer は、イベントの数を示す符号なし 32 ビット整数です。

GROUP 句を使用する場合、WHERE 句、BY 句、HAVING 句は省略可能です。

GROUP 句の基本的な使用では、最初のイベントの受信時に開始される時間間隔内のイベントのグループ化が要求される場合があります。 たとえば次のクエリでは、5 分以内に送信されたすべての電子メール イベントがグループ化されます。 永続コンシューマーでこのクエリを使用すると、新しいメールを受信するたびにユーザーのページングを行うのではなく、過去 5 分以内に新しい電子メールを受信した場合にのみユーザーに通知できます。

SELECT * FROM EmailEvent GROUP WITHIN 300

より詳細な情報が必要な場合は、イベント クラスの 1 つ以上のプロパティでイベントをグループ化できます。 次のクエリでは、電子メール イベントを、同じ Sender プロパティ値を持つ他のイベントと組み合わせることを要求しています。

SELECT * FROM EmailEvent GROUP WITHIN 300 BY Sender

WHERE 句を追加すると、さらに詳しい情報を指定できます。 たとえば次のクエリは、特定の送信者から過去 10 分以内に受信した新しい電子メールのユーザーに対して、同じ Importance プロパティ値を持つ他のイベントと組み合わせて通知を行います。

SELECT * FROM EventClass WHERE Sender = "MyBoss" 
  GROUP WITHIN 300 BY Importance