Encontrar todas las filas donde la última hora del evento es durante un período determinado

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

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

¿Fue útil?

Solución

de su esquema que nos mostró - -

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top