0

这与我试图用 SQL 编写自动化的 OpenNMS 相关。我有一个系统,每次备份成功时都会将事件发送到表中。我想检测任何给定节点的备份是否过期。因此,例如(简化的)表如下所示:

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 小时(我猜想根本没有发生备份,尽管这个数据库中有没有备份的节点(因为它们是不同类型的节点))。

4

2 回答 2

2

从您向我们展示的架构中获取未备份的节点列表是不可能的。

获取过期 24 小时的节点列表很简单:

select nodeid, max(eventtime)
from your_table
group by nodeid
having max(eventtime) < now() - '24 hours'::interval
于 2009-12-17T12:21:51.700 回答
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 小时内未运行备份的节点。

分享和享受。

于 2009-12-17T12:14:24.927 回答