Encontrar linhas em que o tempo mais recente do evento termina um período especificado

StackOverflow https://stackoverflow.com/questions/1920456

  •  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ó)).

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top