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