Trouver toutes les lignes où la dernière heure de l'événement est sur une période donnée

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

  •  20-09-2019
  •  | 
  •  

Question

Le concerne OpenNMS où je suis en train d'écrire une automatisation dans SQL. J'ai un système qui envoie des événements à une table chaque fois que la sauvegarde réussit. Je veux détecter si la sauvegarde est en retard pour un nœud donné. Ainsi, par exemple la table (simplifiée) ressemble à:

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

Alors, ce que je dois une liste des années NODEID où la sauvegarde est en retard de 24 heures (et je suppose que lorsque aucune sauvegarde a eu lieu du tout, bien qu'il existe des noeuds dans cette base de données qui ne se sont pas sauvegardées (comme ils sont différents types de noeud)).

Était-ce utile?

La solution

Obtenir la liste des noeuds qui ne sont pas sauvegardés - à partir de votre schéma que vous nous avez montré -. Est impossible

Obtenir la liste des noeuds qui sont 24 heures de retard est trivial:

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

Autres conseils

Le SQL suivante est pour Oracle mais je suppose qu'il ya des installations de traitement des temps similaires dans 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;

fera rapport sur les nœuds où une sauvegarde n'a pas été exécuté dans les dernières 48 heures.

Partager et profiter.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top