Clausola HAVING
La clausola HAVING viene usata per filtrare gli eventi ricevuti durante l'intervallo di raggruppamento specificato nella clausola WITHIN. Ad esempio, è possibile costruire un'istruzione SELECT in modo che non restituisca nulla a meno che non siano presenti almeno 5 eventi nell'ultimo intervallo di 30 secondi.
La clausola WITHIN viene eseguita immediatamente nell'istruzione SELECT dopo la clausola GROUP. La clausola HAVING opera sulla proprietà NumberOfEvents della classe di sistema __AggregateEvent, di cui il gruppo creato dalla clausola GROUP è un membro. La clausola HAVING può usare tutti gli operatori relazionali standard.
La sintassi è la seguente:
SELECT * FROM EventClass [WHERE property = value]
GROUP WITHIN interval [BY property_list]
HAVING NumberOfEvents operator constant
Il valore EventClass è la classe di evento di cui l'evento è membro e valore è il valore per la proprietà in cui è richiesta la notifica. L'intervallo è un intero senza segno che rappresenta l'intervallo di raggruppamento (in secondi) dopo la ricezione del primo evento. L'elenco delle proprietà è un elenco delimitato da virgole di una o più proprietà incluse nella classe di evento. L'operatore è qualsiasi operatore relazionale. Il valore costante è qualsiasi intero senza segno a 32 bit che indica il numero di eventi utilizzati per il filtro.
Quando si usa la clausola HAVING, le clausole WHERE e BY sono facoltative.
La query evento seguente richiede che le notifiche della classe EmailEvent vengano raggruppate in un evento 300 secondi dopo il primo evento ricevuto da WMI. Inoltre, la query richiede che l'istanza di __AggregateEvent venga recapitata solo se WMI riceve più di cinque eventi di posta elettronica in tale 300 secondi.
SELECT * FROM EmailEvent GROUP WITHIN 300 HAVING NumberOfEvents > 5
Nell'esempio seguente vengono raggruppati tutti gli eventi ricevuti in 600 secondi ( ovvero 10 minuti) dal TargetInstance.proprietà SourceName. In questo esempio, gli eventi di aggregazione vengono recapitati solo se il numero di eventi Win32_NTLogEvent ricevuti dalla stessa origine supera 25. Tenere presente che l'operatore ISA fa sì che la proprietà TargetInstance della classe di sistema __InstanceCreationEvent rappresenti un'istanza della classe Win32_NTLogEvent.
SELECT * FROM __InstanceCreationEvent
WHERE TargetInstance ISA "Win32_NTLogEvent"
GROUP WITHIN 600 BY TargetInstance.SourceName
HAVING NumberOfEvents > 25