Condividi tramite


Clausola HAVING

La clausola HAVING viene usata per filtrare gli eventi ricevuti durante l'intervallo di raggruppamento specificato nella clausola WITHIN. Ad esempio, un'istruzione SELECT può essere costruita in modo che non restituisca nulla a meno che non siano stati presenti almeno 5 eventi all'interno dell'ultimo intervallo di 30 secondi.

La clausola WITHIN segue 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 il valore è il valore della proprietà in cui è necessaria la notifica. L'intervallo è un intero senza segno che rappresenta l'intervallo di raggruppamento (in secondi) dopo aver ricevuto il 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 a 32 bit senza segno che indica il numero di eventi usati per il filtro.

Quando si usa la clausola HAVING, le clausole WHERE e BY sono facoltative.

La query di evento seguente richiede che le notifiche della classe EmailEvent vengano raggruppate in un evento di 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 quel 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) da 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 causa la proprietà TargetInstance della classe di sistema __InstanceCreationEvent per rappresentare un'istanza della classe Win32_NTLogEvent .

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