GROUP 子句

GROUP 子句导致 WMI 生成单个通知来表示一组事件。 代表通知是 __AggregateEvent 系统类的实例。 __AggregateEvent 系统类包含两个属性:代表NumberOfEvents代表 属性是一个嵌入对象,其中包含在 WITHIN 子句中指定的分组间隔期间收到的实例之一。 例如,如果生成聚合事件来通知实例修改事件,代表 包含 __InstanceModificationEvent 类的一个实例。 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 值是事件所属的事件类, 是需要通知的属性的值。 间隔是一个无符号整数,表示第一个事件后分组间隔。 无符号整数是秒数。 属性列表是事件类中包含的一个或多个属性的逗号分隔列表;运算符 是任何关系运算符;和 整数 是一个无符号 32 位整数,指示多个事件。

使用 GROUP 子句时,WHERE、BY 和 HAVING 子句是可选的。

GROUP 子句的基本用法可能会请求在收到第一个事件时开始的时间间隔内对事件进行分组。 例如,以下查询将 5 分钟内发送的所有电子邮件事件分组。 永久使用者可能仅在最近 5 分钟内收到新电子邮件时才使用此查询通知用户,而不是每次收到新电子邮件时分页用户。

SELECT * FROM EmailEvent GROUP WITHIN 300

如果需要更详细的信息,事件可以按事件类的一个或多个属性进行分组。 以下查询请求电子邮件事件与 发件人 属性中具有相同值的其他事件组合在一起:

SELECT * FROM EmailEvent GROUP WITHIN 300 BY Sender

通过添加 WHERE 子句可以实现更高级别的详细信息。 例如,以下查询通知用户来自特定发件人的新电子邮件,该电子邮件已在过去 10 分钟内到达,并结合 Importance 属性中具有相同值的其他事件:

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