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

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


Mn_902

Recommended Posts

عندي جدول 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

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


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

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

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

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

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

و انه من الممكن ان يكون موظف حصل علي اكثر من درجة او مستوي بعد تاريخ 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												
																			



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

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

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

السلام عليكم

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

المطلوب :-

استعلام لجميع الموظفين ويظهر لي سجل واحد (بشرط):
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

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

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
)



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

وشكرا لكم

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

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

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

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

×   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.

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

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

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