Osama Soliman بتاريخ: 9 نوفمبر 2017 تقديم بلاغ مشاركة بتاريخ: 9 نوفمبر 2017 (معدل) السادة الافاضل / اعضاء المنتدى السلام عليكم ورحمة الله وبركاته فيما يلى استعلام لعرض التورايخ المتتالية داخل جدول مثال عرض الاجازات الواقعة فى ايام متتالية لكل موظف : بفرض انشاء الجدول التالى : 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 كما فى الكود الموضح عاليه. مع وافر تحياتى اسامه سليمان تم تعديل 9 نوفمبر 2017 بواسطة Osama Soliman اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Recommended Posts
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.