Mn_902 بتاريخ: 7 أبريل 2007 تقديم بلاغ مشاركة بتاريخ: 7 أبريل 2007 عندي جدول EMP_POSTIONS يحتوي على هيستوري الموظفID_EMPL,GRADE,LVL(LEVEL),STAR_DT,ECTاريد استعلام عن تاريخ 1/1/2005 ومافوق ويعطني آخر سجل للموظف مثال ID 001 GRADE 7 LVL 11 STARD_DT 6/4/2003ID 001 GRADE 7 LVL 12 STARD_DT 6/4/2004ID 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/2003ID 002 GRADE 9 LVL 3 STARD_DT 6/4/2004 (هذا الموظف لايدخل في الشرط سنة 2005)ID 003 GRADE 8 LVL 12 STARD_DT 6/4/2004ID 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ارجوا من لدية معرفة ان يحلها ليوالله ان شغلي واقف من اسبوع ولم استطع حلهاأملي في الله ثم فيكم اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
هانى سند بتاريخ: 7 أبريل 2007 تقديم بلاغ مشاركة بتاريخ: 7 أبريل 2007 أخي الكريم أرجو منك ارسال سكربت الجدول مع بعض الsample data فيه لاني لا افهم المطلوب بالضبطبالتوفيق اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
هانى سند بتاريخ: 7 أبريل 2007 تقديم بلاغ مشاركة بتاريخ: 7 أبريل 2007 السلام عليكم ورحمة الله و بركاته أخي الكريم لقد قمت باشناء جدول مشابه لجدولك و ادخال بعض البيانات به و لقد فهمت تقريبا انه يمكن ان يوجد لديك اكثر من سجل للموظف لديك في الجدول علي حسب الدرجة و المتسو الوظيفي و انه من الممكن ان يكون موظف حصل علي اكثر من درجة او مستوي بعد تاريخ 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 ارجو ان يكون هذا هو المطلوب مع تمنياتي بالتوفيق اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Mn_902 بتاريخ: 7 أبريل 2007 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 7 أبريل 2007 الله يجزاك خير لي عودة معك بعد صلاة الظهروجزاك الله خيرا اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Mn_902 بتاريخ: 8 أبريل 2007 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 8 أبريل 2007 السلام عليكم آسف عندما عرضت الحل للمسؤل قال لي عندي نقطة اضافية وهي مهمة ( النقطة الثانية في الأسفل)المطلوب :-استعلام لجميع الموظفين ويظهر لي سجل واحد (بشرط):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/1978ID_EMPL 000056 START_DT 20/11/1979 EFF_ON EMP "U" LTR_DT 20/11/1979ID_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/1980ID_EMPL 000056 START_DT 18/10/1980 EFF_ON EMP 'U" LTR_DT 08/11/1980ID_EMPL 000056 START_DT 09/04/1983 EFF_ON EMP "U" LTR_DT 12/12/1979وهكذاالله لايحرمنا من خدماتكموارفقت السكربت SCRIPT_TOAD.zip اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Mn_902 بتاريخ: 8 أبريل 2007 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 8 أبريل 2007 آمل المحاولة اخي هاني سندالله يوفقك اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Mn_902 بتاريخ: 9 أبريل 2007 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 9 أبريل 2007 اخي هاني سندهل الان تحاول فيها ام صرفت النظر عنهامازلت انتظر ردك للتطمين اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Mn_902 بتاريخ: 9 أبريل 2007 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 9 أبريل 2007 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 ) هذا حل اعتقد انه صحيحبس بتأكد من البياناتوشكرا لكم اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Recommended Posts
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.