العثور على أي صفوف حيث يكون وقت الحدث الأخير خلال فترة محددة

StackOverflow https://stackoverflow.com/questions/1920456

  •  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 ساعة الماضية.

مشاركة واستمتع.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top