Encontrar todas las filas donde la última hora del evento es durante un período determinado
-
20-09-2019 - |
Pregunta
El relaciona con OpenNMS donde yo estoy tratando de escribir una automatización en SQL. Tengo un sistema que envía eventos a una mesa cada vez que la copia de seguridad se realiza correctamente. Quiero detectar si la copia de seguridad está atrasado para cualquier nodo dado. Así, por ejemplo, la tabla (simplificado) se ve así:
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
Así que lo que necesito es una lista de de NODEID donde la copia de seguridad es un retraso de 24 horas (y supongo que se haya producido ninguna copia de seguridad en absoluto, aunque existen nodos en esta base de datos que no se deje una copia de seguridad (ya que son diferentes tipos de nodo)).
Solución
lista de nodos que no se copiaron conseguir. No es posible
lista de nodos que son 24 horas Obtención de retraso es trivial:
select nodeid, max(eventtime)
from your_table
group by nodeid
having max(eventtime) < now() - '24 hours'::interval
Otros consejos
El siguiente código SQL para Oracle es, pero voy a asumir que hay instalaciones de manejo de tiempo similares en 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;
Esta informará en los nodos en una copia de seguridad no se ha ejecutado en las últimas 48 horas.
Compartir y disfrutar.