HAVING-Klausel

Die HAVING-Klausel wird verwendet, um die Ereignisse zu filtern, die während des in der WITHIN-Klausel angegebenen Gruppierungsintervalls empfangen werden. Beispielsweise könnte eine SELECT-Anweisung so konstruiert werden, dass sie nichts zurückgibt, es sei denn, es gab mindestens 5 Ereignisse innerhalb der letzten 30 Sekunden INTERVAL.

Die WITHIN-Klausel folgt unmittelbar in der SELECT-Anweisung nach der GROUP-Klausel. Die HAVING-Klausel arbeitet mit der NumberOfEvents-Eigenschaft der __AggregateEvent Systemklasse, deren Mitglied die von der GROUP-Klausel erstellte Gruppe ist. Die HAVING-Klausel kann alle relationalen Standardoperatoren verwenden.

Die Syntax lautet wie folgt:

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

Der EventClass-Wert ist die Ereignisklasse, deren Element das Ereignis ist, und value ist der Wert für die Eigenschaft, für die eine Benachrichtigung erforderlich ist. Das Intervall ist eine ganze Zahl ohne Vorzeichen, die das Gruppierungsintervall (in Sekunden) nach dem Empfang des ersten Ereignisses darstellt. Die Eigenschaftenliste ist eine durch Trennzeichen getrennte Liste einer oder mehrerer Eigenschaften, die in der Ereignisklasse enthalten sind. Der Operator ist ein beliebiger relationaler Operator. Der konstante Wert ist eine beliebige 32-Bit-Ganzzahl ohne Vorzeichen, die die Anzahl der Ereignisse angibt, die zum Filtern verwendet werden.

Bei Verwendung der HAVING-Klausel sind die WHERE- und BY-Klauseln optional.

Die folgende Ereignisabfrage fordert, dass Benachrichtigungen der EmailEvent-Klasse 300 Sekunden nach dem ersten Ereignis, das WMI empfängt, in einem Ereignis gruppiert werden. Außerdem fordert die Abfrage an, dass die __AggregateEvent-Instanz nur übermittelt werden soll, wenn WMI in diesen 300 Sekunden mehr als fünf E-Mail-Ereignisse empfängt.

SELECT * FROM EmailEvent GROUP WITHIN 300 HAVING NumberOfEvents > 5

Im folgenden Beispiel werden alle Ereignisse gruppiert, die in 600 Sekunden (d. h. 10 Minuten) von der Eigenschaft TargetInstance.SourceName empfangen werden. In diesem Beispiel werden Aggregatereignisse nur übermittelt, wenn die Anzahl der Win32_NTLogEvent-Ereignisse, die von derselben Quelle empfangen werden, 25 übersteigt. Beachten Sie, dass der ISA-Operator bewirkt, dass die TargetInstance-Eigenschaft der __InstanceCreationEvent-Systemklasse eine Instanz der Win32_NTLogEvent-Klasse darstellt.

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