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