Descrição:
Como posso retornar os alarmes ativos do Elipse E3 através dos registros do banco de dados?
Solução:
Para retornar os alarmes ativos do Elipse E3, tendo eles sido reconhecidos ou não, deve-se realizar a seguinte consulta:
SELECT * FROM Alarms RIGHT JOIN (SELECT * FROM (SELECT Min(EventCLSID) AS EventCLSID, SUM(OutTimeDbl) AS OutTimeDbl FROM Alarms WHERE InTime > DATEADD(hh, -48, GETDATE()) GROUP BY EventCLSID)tbA WHERE OutTimeDbl = 0)tbB ON Alarms.EventCLSID = tbB.EventCLSID
Resultado desta consulta:
Vamos explicar este resultado em partes.
Antes de tudo, a primeira consulta utilizada serve para agrupar os CLSIDs das últimas 48 horas e somar os dados do parâmetro OutTimeDbl. Desta forma, saberemos todos os alarmes gravadas durante este período.
SELECT Min(EventCLSID) AS EventCLSID, SUM(OutTimeDbl) AS OutTimeDbl FROM Alarms WHERE InTime > DATEADD(hh, -48, GETDATE()) GROUP BY EventCLSID
Logo após, a segunda parte serve para separar apenas os CLSIDs cujos valores do parâmetro OutTimeDbl é igual a zero, o que significa que este alarme ainda não saiu da condição:
SELECT * FROM (SELECT Min(EventCLSID) AS EventCLSID, SUM(OutTimeDbl) AS OutTimeDbl FROM Alarms WHERE InTime > DATEADD(hh, -48, GETDATE()) GROUP BY EventCLSID)tbA WHERE OutTimeDbl = 0
Afinal, a última consulta, que é a primeira deste artigo, retorna os alarmes cujo CLSIDs são iguais ao retornados pela consulta acima. Desta forma, teremos os registros de alarmes que ainda não saíram da condição de ativos.
Para retornar somente os alarmes que continuam ativos em seu momento de entrada, deve-se criar um filtro pelos valores do parâmetro Acked, conforme consulta abaixo:
SELECT * FROM Alarms RIGHT JOIN
(SELECT * FROM (SELECT Min(EventCLSID) AS EventCLSID, SUM(OutTimeDbl) AS OutTimeDbl FROM Alarms WHERE InTime > DATEADD(hh, -48, GETDATE())
GROUP BY EventCLSID)tbA
WHERE OutTimeDbl = 0)tbB ON Alarms.EventCLSID = tbB.EventCLSID
WHERE Acked = 0
Resultado da consulta:
NOTA: Neste artigo, o banco de dados utilizado para elaborar as consultas foi o Microsoft SQL Server.