HAVING 子句

HAVING 子句用于筛选在 WITHIN 子句中指定的分组间隔内接收到的事件。 例如,可以构造一个 SELECT 语句,使其不返回任何内容,除非在过去的 30 秒 INTERVAL 内至少 HAVE 5 个事件。

SELECT 语句中的 WITHIN 子句紧跟在 GROUP 子句之后。 HAVING 子句作用于 __AggregateEvent 系统类的 NumberOfEvents 属性,GROUP 子句创建的组是该系统类的成员。 HAVING 子句可以使用所有标准关系运算符。

语法如下所示:

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

EventClass 值是事件所属的事件类,value 是需要通知的属性的值。 interval 是一个无符号整数,表示接收到第一个事件后的分组间隔(以秒为单位)。 属性列表是事件类中包含的一个或多个属性的逗号分隔列表。 运算符是任何关系运算符。 常量值是任何无符号 32 位整数,指示用于筛选的事件数。

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

以下事件查询请求在 WMI 接收第一个事件后 300 秒将 EmailEvent 类的通知分组为一个事件。 此外,查询请求 __AggregateEvent 实例仅当 WMI 在该 300 秒内收到超过五个电子邮件事件时才应交付。

SELECT * FROM EmailEvent GROUP WITHIN 300 HAVING NumberOfEvents > 5

以下示例按 TargetInstance.SourceName 属性对在 600 秒(即 10 分钟)内收到的所有事件进行分组。 在此示例中,仅当从同一源接收到的 Win32_NTLogEvent 事件数超过 25 时,才会传送聚合事件。 请记住,ISA 运算符会导致 __InstanceCreationEvent 系统类的 TargetInstance 属性表示 Win32_NTLogEvent 类的实例。

SELECT * FROM __InstanceCreationEvent 
  WHERE TargetInstance ISA "Win32_NTLogEvent" 
  GROUP WITHIN 600 BY TargetInstance.SourceName
  HAVING NumberOfEvents > 25