与OpenNMS有关,我正在尝试在SQL中编写自动化。我有一个系统,每次备份成功时都会向表发送事件。我想检测任何给定节点的备份是否过期。例如,(简化)表格如下:
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
所以我需要的是一个nodeid的列表,其中备份已经过了24小时(我猜这里根本没有发生备份,尽管这个数据库中的节点没有得到备份(因为它们是不同类型的节点))。
答案 0 :(得分:2)
从您向我们展示的架构中获取未备份的节点列表是不可能的。
获取24小时过期的节点列表很简单:
select nodeid, max(eventtime)
from your_table
group by nodeid
having max(eventtime) < now() - '24 hours'::interval
答案 1 :(得分:0)
以下SQL适用于Oracle,但我假设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;
这将报告过去48小时内尚未运行备份的节点。
分享并享受。