Trovare tutte le righe in cui l'ultima ora dell'evento è in un determinato periodo

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

  •  20-09-2019
  •  | 
  •  

Domanda

L'riferisce a OpenNMS dove sto cercando di scrivere un automazione in SQL. Ho un sistema che invia gli eventi ad un tavolo ogni volta che il backup riesce. Voglio rilevare se il backup è in ritardo per ogni nodo. Così, per esempio il (semplificato) tabella appare come:

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

Così che cosa ho bisogno è un elenco di NodeID di cui il backup è in ritardo di 24 ore (e credo che in cui nessun backup si è verificato a tutti, anche se ci sono i nodi in questo database che non vengono eseguito il backup (come sono diversi tipi di nodo)).

È stato utile?

Soluzione

dal vostro schema che ci hai mostrato - -

elenco dei nodi che non sono stati sottoposti a backup Ottenere. non è possibile

elenco di nodi che sono 24 ore Ottenere ritardo è banale:

select nodeid, max(eventtime)
from your_table
group by nodeid
having max(eventtime) < now() - '24 hours'::interval

Altri suggerimenti

Il seguente SQL è per Oracle, ma darò per scontato ci sono simili strutture per il tempo di gestione in 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;

Questa riferirà sui nodi in cui un backup non è stato eseguito nelle ultime 48 ore.

Condividere e godere.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top