Die Suche nach allen Zeilen, in denen die letzte Ereigniszeit über einen bestimmten Zeitraum ist
-
20-09-2019 - |
Frage
Das bezieht sich auf OpenNMS, wo ich versuche, eine Automatisierung in SQL zu schreiben. Ich habe ein System, das die Sicherung erfolgreich jedes Mal Ereignisse an einen Tisch sendet. Ich möchte feststellen, ob die Sicherung für einen bestimmten Knoten überfällig ist. So zum Beispiel der (vereinfachte) Tabelle aussieht:
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
Also, was ich brauche, ist eine Liste der nodeid ist, wo die Sicherung um 24 Stunden Verspätung ist (und ich denke, wo keine Sicherung überhaupt stattgefunden hat, obwohl es Knoten in dieser Datenbank enthalten sind, die nach oben werden nicht unterstützt (wie sie sind verschiedene Typen von Knoten)).
Lösung
Erste Liste von Knoten, die nicht gesichert wurden - aus dem Schema, dass Sie uns zeigten, -. Ist nicht möglich
Erste Liste von Knoten, die 24 Stunden überfällig sind, ist trivial:
select nodeid, max(eventtime)
from your_table
group by nodeid
having max(eventtime) < now() - '24 hours'::interval
Andere Tipps
Die folgende SQL ist für Oracle, aber ich nehme an, es gibt ähnliche Zeit-Handling-Einrichtungen 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;
Dies Auf Knoten berichten, wo eine Sicherung nicht in den letzten 48 Stunden ausgeführt wird.
Teile und genießen.