Klausul HAVING
Klausa HAVING digunakan untuk memfilter peristiwa yang diterima selama interval pengelompokan yang ditentukan dalam klausa WITHIN. Misalnya, pernyataan SELECT dapat dibuat sehingga tidak mengembalikan apa pun kecuali ada setidaknya 5 peristiwa dalam INTERVAL 30 detik terakhir.
Klausa WITHIN segera mengikuti dalam pernyataan SELECT setelah klausa GROUP . Klausa HAVING beroperasi pada properti NumberOfEvents dari kelas sistem __AggregateEvent , di mana grup yang dibuat oleh klausa GROUP adalah anggota. Klausa HAVING dapat menggunakan semua operator relasional standar.
Sintaksnya adalah sebagai berikut:
SELECT * FROM EventClass [WHERE property = value]
GROUP WITHIN interval [BY property_list]
HAVING NumberOfEvents operator constant
Nilai EventClass adalah kelas peristiwa di mana peristiwa tersebut adalah anggota, dan nilai adalah nilai untuk properti tempat pemberitahuan diperlukan. Interval adalah bilangan bulat yang tidak ditandatangani yang mewakili interval pengelompokan (dalam detik) setelah menerima peristiwa pertama. Daftar properti adalah daftar yang dibatasi koma dari satu atau beberapa properti yang disertakan dalam kelas peristiwa. Operator adalah operator relasional apa pun. Nilai konstanta adalah bilangan bulat 32-bit yang tidak ditandatangani yang menunjukkan jumlah peristiwa yang digunakan untuk pemfilteran.
Saat menggunakan klausa HAVING, klausa WHERE dan BY bersifat opsional.
Kueri peristiwa berikut meminta agar pemberitahuan kelas EmailEvent dikelompokkan ke dalam satu peristiwa 300 detik setelah peristiwa pertama yang diterima WMI. Selain itu, kueri meminta instans __AggregateEvent harus dikirimkan hanya jika WMI menerima lebih dari lima peristiwa email dalam 300 detik tersebut.
SELECT * FROM EmailEvent GROUP WITHIN 300 HAVING NumberOfEvents > 5
Contoh berikut mengelompokkan semua peristiwa yang diterima dalam 600 detik (yaitu, 10 menit) oleh TargetInstance. Properti SourceName . Dalam contoh ini, peristiwa agregat hanya dikirimkan jika jumlah peristiwa Win32_NTLogEvent yang diterima dari sumber yang sama melebihi 25. Perlu diingat bahwa operator ISA menyebabkan properti TargetInstance dari kelas sistem __InstanceCreationEvent mewakili instans kelas Win32_NTLogEvent .
SELECT * FROM __InstanceCreationEvent
WHERE TargetInstance ISA "Win32_NTLogEvent"
GROUP WITHIN 600 BY TargetInstance.SourceName
HAVING NumberOfEvents > 25