بتاريخ: 4 أغسطس 201510 سنة comment_265106 السلام عليكم ورحمة الله وبركاته عندى جدول بة انقطاعات الموظفين يحتوى على تاريخ الانقطاع و رقم الموظف محتاج استعلام يعرض الأيام المتتالية بناء على براميتر لعدد الايام فمثلا لو قمت بارسال 3 أيام في البراميتر يقوم الاستعلام بأظهار كل الموظفين الذين تجاوزو3 أيام أنقطاع متتالية وفرضا ان موظف كان مسجل انقطاع في 01-01-2015 02-01-2015 ------------------ 05-01-2015 06-01-2015 المفروض عدم اظهار تلك الموظف وشكرا على تعاونكم تقديم بلاغ
بتاريخ: 6 أغسطس 201510 سنة comment_265128 السلام عليكم create table emp_11 (emp_id number(5),off_date date); insert into emp_11 values(1,to_date('01012011','ddmmyyyy')); insert into emp_11 values(1,to_date('02012011','ddmmyyyy')); insert into emp_11 values(1,to_date('04012011','ddmmyyyy')); insert into emp_11 values(1,to_date('01012011','ddmmyyyy')); insert into emp_11 values(1,to_date('02012011','ddmmyyyy')); insert into emp_11 values(1,to_date('03012011','ddmmyyyy')); create or replace function get_no_of_days(p_no_of_days number,p_emp_id number) return number is o_date date; n_date date; v_count number:=0; v_1 number; v_2 number:=0; begin v_count:=0; for rec2 in (select off_date from emp_11 where emp_id=p_emp_id order by 1) loop if v_count=0 then o_date:=null; else o_date:=n_date; end if; n_date:=rec2.off_date; v_1:=n_date-nvl(o_date,n_date-1); if v_1 =1 then v_2:=v_2+1; if v_2>=p_no_of_days then exit ; end if; else v_2:=0; end if; v_count:=v_count+1; end loop; return v_2; end; select distinct emp_id from emp_11 where get_no_of_days(3, emp_id)>=3; تم تعديل 6 أغسطس 201510 سنة بواسطة haboos تقديم بلاغ
بتاريخ: 6 أغسطس 201510 سنة comment_265129 بص يا باشا , انت محتاج Self Join وتشوف الحاجات الي طرحها من بعض = 1 بس فكر فيها انت بقى تقديم بلاغ
بتاريخ: 9 أغسطس 201510 سنة comment_265180 تسلم دماغك يا باشا شكرا الكود الي فوق اشتغل معاك ؟ لما تلاقى حل ابقى قول عليه عشان غيرك يستفيد . تقديم بلاغ
بتاريخ: 9 أغسطس 201510 سنة كاتب الموضوع comment_265183 CREATE TABLE HR.ABSENCE_DAYS ( ID NUMBER, ABS_DATE DATE ); Insert into ABSENCE_DAYS (ID, ABS_DATE) Values (1, TO_DATE('01/02/2014', 'MM/DD/YYYY')); Insert into ABSENCE_DAYS (ID, ABS_DATE) Values (1, TO_DATE('01/19/2014', 'MM/DD/YYYY')); Insert into ABSENCE_DAYS (ID, ABS_DATE) Values (1, TO_DATE('01/20/2014', 'MM/DD/YYYY')); Insert into ABSENCE_DAYS (ID, ABS_DATE) Values (1, TO_DATE('01/21/2014', 'MM/DD/YYYY')); Insert into ABSENCE_DAYS (ID, ABS_DATE) Values (1, TO_DATE('01/22/2014', 'MM/DD/YYYY')); Insert into ABSENCE_DAYS (ID, ABS_DATE) Values (1, TO_DATE('01/04/2014', 'MM/DD/YYYY')); Insert into ABSENCE_DAYS (ID, ABS_DATE) Values (2, TO_DATE('01/02/2014', 'MM/DD/YYYY')); Insert into ABSENCE_DAYS (ID, ABS_DATE) Values (2, TO_DATE('01/16/2014', 'MM/DD/YYYY')); Insert into ABSENCE_DAYS (ID, ABS_DATE) Values (2, TO_DATE('01/01/2014', 'MM/DD/YYYY')); Insert into ABSENCE_DAYS (ID, ABS_DATE) Values (2, TO_DATE('01/03/2014', 'MM/DD/YYYY')); Insert into ABSENCE_DAYS (ID, ABS_DATE) Values (1, TO_DATE('01/12/2014', 'MM/DD/YYYY')); Insert into ABSENCE_DAYS (ID, ABS_DATE) Values (1, TO_DATE('01/18/2014', 'MM/DD/YYYY')); Insert into ABSENCE_DAYS (ID, ABS_DATE) Values (1, TO_DATE('01/01/2014', 'MM/DD/YYYY')); Insert into ABSENCE_DAYS (ID, ABS_DATE) Values (1, TO_DATE('01/03/2014', 'MM/DD/YYYY')); Insert into ABSENCE_DAYS (ID, ABS_DATE) Values (1, TO_DATE('01/11/2014', 'MM/DD/YYYY')); Insert into ABSENCE_DAYS (ID, ABS_DATE) Values (2, TO_DATE('01/13/2014', 'MM/DD/YYYY')); Insert into ABSENCE_DAYS (ID, ABS_DATE) Values (1, TO_DATE('01/14/2014', 'MM/DD/YYYY')); COMMIT; SELECT ID emp_id, ABS_DATE AS "Absence Day" FROM (SELECT curr_date.id, CURR_DATE.ABS_DATE FROM absence_days curr_date, absence_days next_date WHERE CURR_DATE.ID = NEXT_DATE.ID AND next_date.ABS_DATE - CURR_DATE.ABS_DATE = 1 UNION SELECT next_date.id, next_date.ABS_DATE FROM absence_days curr_date, absence_days next_date WHERE CURR_DATE.ID = NEXT_DATE.ID AND next_date.ABS_DATE - CURR_DATE.ABS_DATE = 1) ORDER BY ID, ABS_DATE; لوحد عايز يجرب دة الكود لل Creation and Select statement تقديم بلاغ
بتاريخ: 9 أغسطس 201510 سنة كاتب الموضوع comment_265184 شكرا على مجهودك الرائع بس المطلوب اظهار الأيام المتتالية لايام الانقطاع وذلك يمكن عن طريق استخدام Self Join كما في الكود المرسل تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.