GROUP 子句

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

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

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

SELECT * FROM EmailEvent GROUP WITHIN 300

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

SELECT * FROM EmailEvent GROUP WITHIN 300 BY Sender

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

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