العثور على أي صفوف حيث يكون وقت الحدث الأخير خلال فترة محددة
-
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 ساعة الماضية.
مشاركة واستمتع.