查找任何行,其中最新的事件时间是在特定时期内
-
20-09-2019 - |
题
在涉及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小时内运行的节点的报告。
共享和欣赏。
不隶属于 StackOverflow