الانتقال إلى المحتوى

استعلام لاظهار التواريخ المتتالية


ZAKI

Recommended Posts

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

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

 

محتاج استعلام يعرض الأيام المتتالية بناء على براميتر لعدد الايام

 

فمثلا لو قمت بارسال 3 أيام في البراميتر يقوم الاستعلام بأظهار كل الموظفين الذين تجاوزو3 أيام أنقطاع متتالية

 

وفرضا ان موظف كان مسجل انقطاع في

 

01-01-2015

02-01-2015

------------------

05-01-2015

06-01-2015

المفروض عدم اظهار تلك الموظف

 

وشكرا على تعاونكم

 

رابط هذا التعليق
شارك

 

السلام عليكم

 

 


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;

 

تم تعديل بواسطة haboos
رابط هذا التعليق
شارك

تسلم دماغك يا باشا :)

شكرا

الكود الي فوق اشتغل معاك ؟

لما تلاقى حل ابقى قول عليه عشان غيرك يستفيد .

رابط هذا التعليق
شارك

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

رابط هذا التعليق
شارك

شكرا على مجهودك الرائع

بس المطلوب اظهار الأيام المتتالية لايام الانقطاع وذلك يمكن عن طريق استخدام Self Join  كما في الكود المرسل

رابط هذا التعليق
شارك

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

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

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

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   تمت استعادة المحتوى السابق الخاص بك.   مسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

جاري التحميل
×
×
  • أضف...

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

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