在涉及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小时逾期(我猜在没有备份已在所有发生,虽然在此数据库中没有得到备份节点(因为它们是不同类型的节点))的

有帮助吗?

解决方案

获取所有未备份节点列表 - 从你的模式,你向我们展示了 - 是不可能的。

获取其在24小时节点列表逾期是微不足道的:

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

其他提示

下面的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小时内运行的节点的报告。

共享和欣赏。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top