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

  • تسجيل الدخول عبر الفيس بوك تسجيل الدخول عبر تويتر Log In with LinkedIn Log In with Google      تسجيل دخول    
  • إنشاء حساب

صورة
- - - - -

استعلام لجميع الموظفين بشرط التاريخ


7 رد (ردود) على هذا الموضوع

#1 Mn_902

Mn_902

    مشترك

  • الأعضــاء
  • 156 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 07 April 2007 - 09:57 AM

عندي جدول EMP_POSTIONS يحتوي على هيستوري الموظف
ID_EMPL,GRADE,LVL(LEVEL),STAR_DT,ECT

اريد استعلام عن تاريخ 1/1/2005 ومافوق ويعطني آخر سجل للموظف

مثال
ID 001 GRADE 7 LVL 11 STARD_DT 6/4/2003
ID 001 GRADE 7 LVL 12 STARD_DT 6/4/2004
ID 001 GRADE 7 LVL 13 STARD_DT 6/4/2005 (هذا المطلوب)
ID 002 GRADE 9 LVL 1 STARD_DT 6/4/2002
ID 002 GRADE 9 LVL 2 STARD_DT 6/4/2003
ID 002 GRADE 9 LVL 3 STARD_DT 6/4/2004 (هذا الموظف لايدخل في الشرط سنة 2005)
ID 003 GRADE 8 LVL 12 STARD_DT 6/4/2004
ID 003 GRADE 8 LVL 13 STARD_DT 6/4/2005 (هذا الملطوب)

جربت هذه الطريقة وهي ناجحة ولكن يعطيني أول سجل
SELECT e. *
FROM EMP_POSITIONS e
WHERE e.AUTOMATICNO in
(SELECT AutomaticNo
FROM EMP_POSITIONS P
WHERE P.ID_EMPL=E.ID_EMPL
AND P.START_DT>=TO_DATE('2005/01/01','YYYY/MM/DD')
and rownum=1)

وإذا وضعت
ORDER BY P.ID_EMPL,P.START_DT DESC

تأتيني رسالة خطاء
ORA-00907: missing right parenthesis

ارجوا من لدية معرفة ان يحلها لي


والله ان شغلي واقف من اسبوع ولم استطع حلها

أملي في الله ثم فيكم

#2 هانى سند

هانى سند

    مشرف سابق وعضو مميز

  • المجموعة الماسية
  • 743 مشاركة

تاريخ المشاركة 07 April 2007 - 10:55 AM

أخي الكريم
أرجو منك ارسال سكربت الجدول مع بعض الsample data فيه

لاني لا افهم المطلوب بالضبط
بالتوفيق

#3 هانى سند

هانى سند

    مشرف سابق وعضو مميز

  • المجموعة الماسية
  • 743 مشاركة

تاريخ المشاركة 07 April 2007 - 11:58 AM

السلام عليكم ورحمة الله و بركاته
أخي الكريم
لقد قمت باشناء جدول مشابه لجدولك و ادخال بعض البيانات به

و لقد فهمت تقريبا انه يمكن ان يوجد لديك اكثر من سجل للموظف لديك في الجدول علي حسب الدرجة و المتسو الوظيفي

و انه من الممكن ان يكون موظف حصل علي اكثر من درجة او مستوي بعد تاريخ 1/1/2005

و لذلك اذا قمت باضافة شرط التاريخ فقط فمن الممكن ان يكون هناك اكثر من سجل لنفس الموظف
لذلك انت تريد ان يظهر سجل واحد فقط علي حسب افتراضي هو اخر درجة او مستوي وظيفي حصل عليها الموظف

و لتحقيق ذلك يمكنك عمل الكويري الاتي
SELECT *  
FROM  EMP_POSTIONS D
WHERE D.STAR_DT>=TO_DATE('01/01/2005')
AND  D.STAR_DT =(SELECT MAX(C.STAR_DT) FROM EMP_POSTIONS C WHERE ID=D.ID)

و فيما يلي عرض للسيلكيت بشرط التاريخ فقط ثم بعد اضافة الشرط الأخر
SQL> SELECT *
  2  FROM  EMP_POSTIONS D
  3  WHERE D.STAR_DT>=TO_DATE('01/01/2005')
  4 ;

ID																			  
--------------------------------------------------------------------------------
	 GRADE		LVL STAR_DT		   ECT									 
---------- ---------- ---------- ----------									 
003																			 
		 8		 14 04-06-2006												
																				
001																			 
		 7		 13 04-06-2005												
																				
003																			 
		 8		 13 04-06-2005												
																				

SQL> SELECT *
  2  FROM  EMP_POSTIONS D
  3  WHERE D.STAR_DT>=TO_DATE('01/01/2005')
  4  AND  D.STAR_DT =(SELECT MAX(C.STAR_DT) FROM EMP_POSTIONS C WHERE ID=D.ID);

ID																			  
--------------------------------------------------------------------------------
	 GRADE		LVL STAR_DT		   ECT									 
---------- ---------- ---------- ----------									 
003																			 
		 8		 14 04-06-2006												
																				
001																			 
		 7		 13 04-06-2005												
																				

ارجو ان يكون هذا هو المطلوب

مع تمنياتي بالتوفيق

#4 Mn_902

Mn_902

    مشترك

  • الأعضــاء
  • 156 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 07 April 2007 - 12:21 PM

الله يجزاك خير لي عودة معك بعد صلاة الظهر

وجزاك الله خيرا

#5 Mn_902

Mn_902

    مشترك

  • الأعضــاء
  • 156 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 08 April 2007 - 10:24 AM

السلام عليكم

آسف عندما عرضت الحل للمسؤل قال لي عندي نقطة اضافية وهي مهمة ( النقطة الثانية في الأسفل)

المطلوب :-

استعلام لجميع الموظفين ويظهر لي سجل واحد (بشرط):
1.التاريخ البداية (START_DT)
2.وحالة الموظف EFF_ON_EMP
(C Cancle,N New,U Update)(تعديل الوظيفة , موظف جديد , ترك الوظيفة)
3.تاريخ القرار LTR_DT


مثال رقم الموظف 000056
تاريخ البداية(START_DT ) (20/11/1979)هذا متغير (PARAMETER)

ID_EMPL 000056 START_DT 01/12/1978 EFF_ON EMP "U" LTR_DT 19/12/1978
ID_EMPL 000056 START_DT 20/11/1979 EFF_ON EMP "U" LTR_DT 20/11/1979
ID_EMPL 000056 START_DT 20/11/1979 EFF_ON EMP "U" LTR_DT 29/12/1979 (هذا المطلوب)
ID_EMPL 000056 START_DT 28/10/1980 EFF_ON EMP "U" LTR_DT 08/02/1980
ID_EMPL 000056 START_DT 18/10/1980 EFF_ON EMP 'U" LTR_DT 08/11/1980
ID_EMPL 000056 START_DT 09/04/1983 EFF_ON EMP "U" LTR_DT 12/12/1979

وهكذا

الله لايحرمنا من خدماتكم
وارفقت السكربت

ملفات مرفقة

  • ملف مرفق  SCRIPT_TOAD.zip   285.91كيلو   41 عدد مرات التحميل


#6 Mn_902

Mn_902

    مشترك

  • الأعضــاء
  • 156 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 09 April 2007 - 01:40 AM

آمل المحاولة اخي هاني سند

الله يوفقك

#7 Mn_902

Mn_902

    مشترك

  • الأعضــاء
  • 156 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 09 April 2007 - 08:36 AM

اخي هاني سند

هل الان تحاول فيها ام صرفت النظر عنها

مازلت انتظر ردك للتطمين

#8 Mn_902

Mn_902

    مشترك

  • الأعضــاء
  • 156 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 09 April 2007 - 10:20 AM

SELECT e. *
FROM EMP_POSITIONS e
WHERE e.AUTOMATICNO in
(SELECT AutomaticNo
FROM EMP_POSITIONS P
WHERE P.ID_EMPL=E.ID_EMPL
AND P.START_DT<=TO_DATE('1979/11/20','YYYY/MM/DD') 
AND P.LTR_DT IN
(SELECT MAX(LTR_DT)
FROM EMP_POSITIONS S
WHERE P.ID_EMPL=S.ID_EMPL
AND S.START_DT<=TO_DATE('1979/11/20','YYYY/MM/DD') 
)--and rownum=1
)

هذا حل اعتقد انه صحيح
بس بتأكد من البيانات

وشكرا لكم