الانتقال إلى المحتوى
View in the app

A better way to browse. Learn more.

مجموعة مستخدمي أوراكل العربية

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

طريقة الاستعلام عن التواريخ المتتالية فى جدول

Featured Replies

بتاريخ:

السادة الافاضل / اعضاء المنتدى

السلام عليكم ورحمة الله وبركاته

 

فيما يلى استعلام لعرض التورايخ المتتالية داخل جدول مثال عرض الاجازات الواقعة فى ايام متتالية لكل موظف :

 

بفرض انشاء الجدول التالى :

 

CREATE TABLE vacations
(employee_id NUMBER, vac_date DATE);

ثم اضافة البيانات التالية اليه :

 

INSERT INTO vacations VALUES (15,to_date('2017/01/01','yyyy/mm/dd'))
​;INSERT INTO vacations VALUES (15,to_date('2017/01/02','yyyy/mm/dd'));
INSERT INTO vacations VALUES (15,to_date('2017/01/06','yyyy/mm/dd'));
INSERT INTO vacations VALUES (17,to_date('2017/01/03','yyyy/mm/dd'));
INSERT INTO vacations VALUES (17,to_date('2017/01/07','yyyy/mm/dd'));
INSERT INTO vacations VALUES (17,to_date('2017/01/20','yyyy/mm/dd'));
INSERT INTO vacations VALUES (15,to_date('2017/01/15','yyyy/mm/dd'));
INSERT INTO vacations VALUES (17,to_date('2017/01/19','yyyy/mm/dd'));
INSERT INTO vacations VALUES (17,to_date('2017/02/17','yyyy/mm/dd'));
INSERT INTO vacations VALUES (15,to_date('2017/01/21','yyyy/mm/dd'));
INSERT INTO vacations VALUES (15,to_date('2017/01/22','yyyy/mm/dd'));
INSERT INTO vacations VALUES (17,to_date('2017/02/05','yyyy/mm/dd'));
INSERT INTO vacations VALUES (17,to_date('2017/01/23','yyyy/mm/dd'));
INSERT INTO vacations VALUES (15,to_date('2017/02/25','yyyy/mm/dd'));
INSERT INTO vacations VALUES (15,to_date('2017/02/28','yyyy/mm/dd'));
INSERT INTO vacations VALUES (17,to_date('2017/02/26','yyyy/mm/dd'));
COMMIT;

 

وهى على سبيل المثال الاجازات الخاصة للموظفين ارقام (15و17).
 
 
يتم استخدام الاستعلام التالى لعرض الاجازات الواقعة فى ايام متتالية لكل موظف على حدة :
 
SELECT employee_id, vac_date FROM
(SELECT employee_id ,vac_date, LEAD(vac_date) OVER (ORDER BY employee_id, vac_date) next_vac, LAG(vac_date)OVER (ORDER BY employee_id,vac_date) prv_vac
FROM vacations)
WHERE vac_date - prv_vac  BETWEEN 0 AND 1
OR next_vac - vac_date BETWEEN 0 AND 1
ORDER BY  vac_date;
 
حيث تعمل الدالة LEAD على ايجاد التاريخ التالي (للتاريخ الموجود فى الـ row الحالى )  حسب الترتيب الوارد فى (ORDER BY) الخاص بها. 
اما الدالة LAG فتعمل على ايجار التاريخ السابق  (للتاريخ الموجود فى الـ row الحالى )  حسب الترتيب الوارد  فى (ORDER BY) الخاص بها. 
 
ولانه لا يمكن استخدام هذه الدوال فى الـ WHERE فقد تم وضعها فى sub-query كما فى الكود الموضح عاليه.
 
 
مع وافر تحياتى
 
اسامه سليمان
 
 

تم تعديل بواسطة Osama Soliman

انضم إلى المناقشة

يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.

زائر
أضف رد على هذا الموضوع...

برجاء الإنتباه

بإستخدامك للموقع فأنت تتعهد بالموافقة على هذه البنود: سياسة الخصوصية

Account

Navigation

البحث

إعداد إشعارات المتصفح الفورية

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.