Trovare tutte le righe in cui l'ultima ora dell'evento è in un determinato periodo
-
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)).
Soluzione
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.