문제

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

그래서 내가 필요한 것은 24 시간까지 백업이 기한이 지난 Nodeid의 목록입니다 (그리고 백업이 전혀 발생하지 않은 곳이 있지만이 데이터베이스에 백업되지 않는 노드가 있지만 다른 유형의 다른 유형이므로 백업이 전혀 발생하지 않았습니다. 마디)).

도움이 되었습니까?

해결책

백업되지 않은 노드 목록을 얻는 것은 당신이 보여준 스키마에서 - 불가능합니다.

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