الانتقال إلى المحتوى
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

بتاريخ:

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

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

 

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

 

فمثلا لو قمت بارسال 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

بتاريخ:

بص يا باشا , انت محتاج Self Join وتشوف الحاجات الي طرحها من بعض = 1 بس فكر فيها انت بقى

بتاريخ:
  • كاتب الموضوع

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

شكرا

بتاريخ:

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

شكرا

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

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

بتاريخ:
  • كاتب الموضوع
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  كما في الكود المرسل

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

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

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

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

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

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.