Trouver toutes les lignes où la dernière heure de l'événement est sur une période donnée
-
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)).
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.