查找最新事件时间超过指定时间段的任何行

时间:2009-12-17 09:25:42

标签: sql postgresql opennms

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

2 个答案:

答案 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小时内尚未运行备份的节点。

分享并享受。