Encontrar linhas em que o tempo mais recente do evento termina um período especificado
-
20-09-2019 - |
Pergunta
Relacionam -se ao OpenNMS, onde estou tentando escrever uma automação no SQL. Eu tenho um sistema que envia eventos para uma tabela toda vez que o backup é bem -sucedido. Quero detectar se o backup está atrasado para qualquer nó. Por exemplo, a tabela (simplificada) se parece:
nodeid, eventid, eventuei, eventtime
1 , 1 , backupOk, 09:20 15/12/09
2 , 2 , backupOk, 09:25 15/12/09
3 , 3 , backupOk, 09:30 15/12/09
1 , 4 , backupOk, 09:20 16/12/09
2 , 5 , backupOk, 09:25 16/12/09
2 , 6 , backupOk, 09:25 17/12/09
3 , 7 , backupOk, 09:30 17/12/09
Então, o que eu preciso é uma lista de nodeid, onde o backup está atrasado em 24 horas (e acho que não ocorreu nenhum backup, embora haja nós neste banco de dados que não sejam backup (como são tipos diferentes de tipos de nó)).
Solução
Obter a lista de nós que não foram backup - do seu esquema que você nos mostrou - não é possível.
Obter a lista de nós que são 24 horas em atraso é trivial:
select nodeid, max(eventtime)
from your_table
group by nodeid
having max(eventtime) < now() - '24 hours'::interval
Outras dicas
O seguinte SQL é para o Oracle, mas assumirei que existem instalações de manuseio de tempo semelhantes no PostgreSQL:
SELECT E.NODEID, E.LAST_BACKUP_TIME
FROM (SELECT NODEID, MAX(EVENTTIME) AS LAST_BACKUP_TIME
FROM BACKUP_EVENTS
WHERE EVENTUEI = 'backupOk'
GROUP BY NODEID) E
WHERE E.LAST_BACKUP_TIME < SYSDATE - INTERVAL '2' DAY;
Isso relatará sobre nós em que um backup não foi executado nas últimas 48 horas.
Compartilhe e curta.