HAVING 子句

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

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

语法如下所示:

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

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

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

以下事件查询请求将 EmailEvent 类的通知分组到 WMI 接收的第一个事件后 300 秒内。 此外,仅当 WMI 在该 300 秒内收到 5 个以上的电子邮件事件时,查询才会请求传送 __AggregateEvent 实例。

SELECT * FROM EmailEvent GROUP WITHIN 300 HAVING NumberOfEvents > 5

以下示例按 TargetInstance对 600 秒(即 10 分钟)接收的所有事件进行分组。SourceName 属性。 在此示例中,仅当从同一源收到的 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