Klauzule HAVING
Klauzule HAVING slouží k filtrování událostí přijatých během intervalu seskupení zadaného v klauzuli WITHIN. Příkaz SELECT může být například vytvořen tak, aby vracel nic, pokud v posledních 30sekundových intervalech nedošlo k alespoň 5 událostem.
Klauzule WITHIN následuje okamžitě v příkazu SELECT za klauzulí GROUP. Klauzule HAVING pracuje s NumberOfEvents vlastnost __AggregateEvent systémové třídy, ze které je skupina vytvořená klauzulí GROUP členem. Klauzule HAVING může používat všechny standardní relační operátory.
Syntaxe je následující:
SELECT * FROM EventClass [WHERE property = value]
GROUP WITHIN interval [BY property_list]
HAVING NumberOfEvents operator constant
Hodnota EventClass je třída události, pro kterou je událost členem, a hodnota je hodnota vlastnosti, pro kterou je požadováno oznámení. Interval je celé číslo bez znaménka, které představuje interval seskupení (v sekundách) po přijetí první události. Seznam vlastností je čárkami oddělený seznam jedné nebo více vlastností, které jsou zahrnuty do třídy událostí. Operátor je libovolný relační operátor. Konstantní hodnota je libovolné 32bitové celé číslo bez znaménka označující počet událostí použitých k filtrování.
Při použití klauzule HAVING jsou klauzule WHERE a BY volitelné.
Následující dotaz na události požaduje, aby se oznámení Třídy EmailEvent seskupila do jedné události 300 sekund po první události, kterou služba WMI přijme. Dotaz také vyžaduje, aby instance __AggregateEvent byla doručena pouze v případě, že služba WMI obdrží více než pět e-mailových událostí za těchto 300 sekund.
SELECT * FROM EmailEvent GROUP WITHIN 300 HAVING NumberOfEvents > 5
Následující příklad seskupí všechny události přijaté za 600 sekund (tj. 10 minut) podle TargetInstance. vlastnostSourceName V tomto příkladu se agregační události doručují pouze v případě, že počet Win32_NTLogEvent událostí přijatých ze stejného zdroje překročí 25. Mějte na paměti, že operátor ISA způsobí, že TargetInstance vlastnost __InstanceCreationEvent systémová třída představuje instanci Win32_NTLogEvent třídy.
SELECT * FROM __InstanceCreationEvent
WHERE TargetInstance ISA "Win32_NTLogEvent"
GROUP WITHIN 600 BY TargetInstance.SourceName
HAVING NumberOfEvents > 25