بتاريخ: 30 أكتوبر 201213 سنة comment_228533 السلام عليكم ورحمة الله وبركاتهكيف يمكن تحديد عدد الأيام بين تاريخين بشرط معين؟مثلاً يوجد جدول به هذه البياناتالتاريخ الكمية25/01/12 2010/02/12 815/04/12 023/07/12 1503/08/12 002/10/12 11المطلوب: كيف يمكن حساب عدد الأيام التي تكون الكمية فيها لا تساوي صفر بين اول تاريخ وآخر تاريخ ؟ياريت يكون في رد سريع من اي حد عنده فكرةوشكراً تقديم بلاغ
بتاريخ: 30 أكتوبر 201213 سنة comment_228538 select count(start_date) , count(end_date)from tablewhere qty !=0; تقديم بلاغ
بتاريخ: 31 أكتوبر 201213 سنة كاتب الموضوع comment_228548 select count(start_date) , count(end_date)from tablewhere qty !=0; السلام عليكم ورحمة الله وبركاتهأخي الفاضل شكراً لردك ومحاولة المساعدةولكن هذا الحل غير المطلوبcount تحسب عدد التواريخ فقطالمطلوب هو حساب عدد الأيام بين أول تاريخ وآخر تاريخ مع استبعاد (او طرح) الأيام التي تكون فيها الكمية = 0 ((من المثال الموجود في المشاركة الأولى))ياريت يكون في رد سريع من اي حد عنده فكرةوشكراً تم تعديل 31 أكتوبر 201213 سنة بواسطة az123 تقديم بلاغ
بتاريخ: 31 أكتوبر 201213 سنة comment_228550 السلام عليكماتفضل الحلselect id,max(date)-min(date) from table_name where qty<>0 and date BETWEEN 'firstdate' AND '2nddate' group by idحيث id هو رقم الصنفdateالتاريخfirstdate بداية الفترة2nddate نهاية الفترةجرب وادعيلىمعكم ولكم نتواصل تقديم بلاغ
بتاريخ: 31 أكتوبر 201213 سنة كاتب الموضوع comment_228557 السلام عليكماتفضل الحلselect id,max(date)-min(date) from table_name where qty<>0 and date BETWEEN 'firstdate' AND '2nddate' group by idحيث id هو رقم الصنفdateالتاريخfirstdate بداية الفترة2nddate نهاية الفترةجرب وادعيلىمعكم ولكم نتواصل السلام عليكم ورحمة الله وبركاتهأخي الفاضل شكراً لردك ومحاولة المساعدةولكن هذا الحل لا يعطي المطلوبالمطلوب هو حساب عدد الأيام بين أول تاريخ وآخر تاريخ مع استبعاد (او طرح) الأيام التي تكون فيها الكمية = 0 ((من المثال الموجود في المشاركة الأولى)) تقديم بلاغ
بتاريخ: 31 أكتوبر 201213 سنة comment_228560 select SUM(END_DATE-START_DATE) NO_DAYS,QTY from table_name where qty<>0 and START_DATE >=P_START_DATE AND END_DATE <=P_END_DATE GROUP BY QTY تقديم بلاغ
بتاريخ: 31 أكتوبر 201213 سنة comment_228574 السلام عليكم ورحمة الله وبركاته Create table aaa ( Id integer , dat date , qty integer , constraint aaa_id_pk primary key (id) ) ; insert into aaa values ( 1 , '25/01/12' , 20 ) ; insert into aaa values ( 2 , '10/02/12' , 8 ) ; insert into aaa values ( 3 , '15/04/12' , 0 ) ; insert into aaa values ( 4 , '23/07/12' , 15 ) ; insert into aaa values ( 5 , '03/08/12' , 0 ) ; insert into aaa values ( 6 , '02/10/12' , 11 ) ; commit ; Select max(dat) , min(dat) , max( ( select count(dat) from aaa where qty = 0 ) ) zero , (max(dat) - min(dat)) - max( ( select count(dat) from aaa where qty = 0 ) ) net From aaa ; MAX(DAT) MIN(DAT) ZERO NET -------- -------- ---------- ---------- 02/10/12 25/01/12 2 249 Select max(dat) , min(dat) , max( ( select count(dat) from aaa where qty = 0 and dat > &mindat and dat < &maxdat ) ) zero , (max(dat) - min(dat)) - max( ( select count(dat) from aaa where qty = 0 ) ) net From aaa Where dat > &mindat and dat < &maxdat ; جزاك الله كل خير تقديم بلاغ
بتاريخ: 31 أكتوبر 201213 سنة comment_228576 قم بتجربه الداله بها ماطلبت CREATE FUNCTION ESLAM4444 (P_START_DATE DATE, P_END_DATE DATE ) RETURN NUMBER IS V_COUNT NUMBER:=0; BEGIN SELECT TO_DATE(P_START_DATE,'DD-MM-YYYY') - TO_DATE(P_END_DATE,'DD-MM-YYYY') INTO V_COUNT FROM DUAL WHERE QTY!=0 AND P_START_DATE !=P_END_DATE AND P_END_DATE!=P_START_DATE; RETURN V_COUNT; END; تقديم بلاغ
بتاريخ: 31 أكتوبر 201213 سنة comment_228577 المطلوب هو حساب عدد الأيام بين أول تاريخ وآخر تاريخ مع استبعاد (او طرح) الأيام التي تكون فيها الكمية = 0 ((من المثال الموجود في المشاركة الأولى)) يعني انت عايز تجمع كل الايام اللي فيها بضاعه وبعد كدا تطرحه من الايام اللي مفيهاش بضاعه تقديم بلاغ
بتاريخ: 1 نوفمبر 201213 سنة كاتب الموضوع comment_228585 المطلوب هو حساب عدد الأيام بين أول تاريخ وآخر تاريخ مع استبعاد (او طرح) الأيام التي تكون فيها الكمية = 0 ((من المثال الموجود في المشاركة الأولى)) يعني انت عايز تجمع كل الايام اللي فيها بضاعه وبعد كدا تطرحه من الايام اللي مفيهاش بضاعه نعم بالظبط كده تم تعديل 1 نوفمبر 201213 سنة بواسطة az123 تقديم بلاغ
بتاريخ: 1 نوفمبر 201213 سنة كاتب الموضوع comment_228590 Select max(dat) , min(dat) , max( ( select count(dat) from aaa where qty = 0 ) ) zero , (max(dat) - min(dat)) - max( ( select count(dat) from aaa where qty = 0 ) ) netFrom aaa ;MAX(DAT) MIN(DAT) ZERO NET-------- -------- ---------- ----------02/10/12 25/01/12 2 249[/code]جزاك الله كل خير جزاك الله خير الجزاءالكمية لا تساوي 0 في اليومين المحددين (15/4 و 3/8) فقط ولكن تساوي صفر في الفترة من (15/4 إلى 23/7) وأيضاً من (3/8 إلى 2/10)يعني الكمية تساوي صفر في الفترة بين ( التاريخ التي فيه الكمية تساوي صفر و التاريخ التالي له)أنتظر ردك وشكراً select SUM(END_DATE-START_DATE) NO_DAYS,QTY from table_name where qty<>0 and START_DATE >=P_START_DATE AND END_DATE <=P_END_DATE GROUP BY QTY قم بتجربه الداله بها ماطلبت CREATE FUNCTION ESLAM4444 (P_START_DATE DATE, P_END_DATE DATE ) RETURN NUMBER IS V_COUNT NUMBER:=0; BEGIN SELECT TO_DATE(P_START_DATE,'DD-MM-YYYY') - TO_DATE(P_END_DATE,'DD-MM-YYYY') INTO V_COUNT FROM DUAL WHERE QTY!=0 AND P_START_DATE !=P_END_DATE AND P_END_DATE!=P_START_DATE; RETURN V_COUNT; END; شكراً لكل من الأخ الفاضل / احمد والأخ الفاضل / إسلام على طرح الحلول ولكن هذه الحلول لا تعطي النتيجة المطلوبةالمطلوب جملة ترجع النتائج التالية :عدد الأيام الكلية في الفترة بين أول تاريخ وآخر تاريخ من المثال في المشاركة الأولى251عدد الأيام التي تكون فيها الكمية = 0159عدد الأيام التي لا تكون فيها الكمية = 0 (عدد الأيام الكلية - عدد الأيام التي تكون فيها الكمية = 0)251 - 159 = 92يا ريت تساعدوني في الوصول إلى الجملة الصحيحة التي ترجع النتائج السابقة وشكراً تم تعديل 1 نوفمبر 201213 سنة بواسطة az123 تقديم بلاغ
بتاريخ: 1 نوفمبر 201213 سنة comment_228600 طيب جرب كدا الحل دا وقولي SELECT (MAX (F_date) - MIN (F_date)) "quantity greate than 0" , (MAX (e.S_date) - MIN (e.S_date)) "quantity equal 0" , (MAX (F_date) - MIN (F_date)) - (MAX (e.S_date) - MIN (e.S_date)) "subtraction" FROM (SELECT date_q F_date FROM test WHERE qty <> 0), (SELECT date_q S_date FROM test WHERE qty = 0) e; test اسم الجدولqty اسم عمود الكميهdate_q اسم عمود التواريخ تقديم بلاغ
بتاريخ: 1 نوفمبر 201213 سنة كاتب الموضوع comment_228604 طيب جرب كدا الحل دا وقولي SELECT (MAX (F_date) - MIN (F_date)) "quantity greate than 0" , (MAX (e.S_date) - MIN (e.S_date)) "quantity equal 0" , (MAX (F_date) - MIN (F_date)) - (MAX (e.S_date) - MIN (e.S_date)) "subtraction" FROM (SELECT date_q F_date FROM test WHERE qty <> 0), (SELECT date_q S_date FROM test WHERE qty = 0) e; test اسم الجدولqty اسم عمود الكميهdate_q اسم عمود التواريخ شكراً جداً لردكانا جربت هذا الحل ولكن يعطي نتيجة غير المطلوبة quantity greater than 0 quantity equal 0 subtraction ----------------------- ----------------- ----------- 251 110 141 المفروض تكون النتيجة : quantity greater than 0 quantity equal 0 ----------------------- ---------------- 92 159 أنتظر ردودكموشكراً لكم تم تعديل 1 نوفمبر 201213 سنة بواسطة az123 تقديم بلاغ
بتاريخ: 1 نوفمبر 201213 سنة comment_228606 معنى كلامك انت عندك فقط عمود واحد بس بتسجل فى التاريخ ولا عمودين بتسجل فيه بدايه الفترة ونهايتها؟ تقديم بلاغ
بتاريخ: 1 نوفمبر 201213 سنة كاتب الموضوع comment_228607 معنى كلامك انت عندك فقط عمود واحد بس بتسجل فى التاريخ ولا عمودين بتسجل فيه بدايه الفترة ونهايتها؟ عمود واحد فقط للتاريخ وعمود آخر فيه الكمية تقديم بلاغ
بتاريخ: 1 نوفمبر 201213 سنة comment_228613 طيب جرب الكود دا SELECT (MAX (F_date) - MIN (F_date)) "quantity greater than 0", QTYZERO.COUNT "quantity equal 0", (MAX (F_date) - MIN (F_date)) - QTYZERO.COUNT "SUB" FROM (SELECT date_q F_date FROM test WHERE qty <> 0), (SELECT SUM ( (SELECT MIN (date_q) DATE_Q FROM test WHERE qty <> 0 AND TO_DATE (date_q, 'dd-mm-rrrr') > TO_DATE (E.DATE_Q, 'DD-MM-RRRR')) - E.DATE_Q) "COUNT" FROM TEST E WHERE QTY = 0) QTYZERO GROUP BY QTYZERO.COUNT quantity greater than 0 quantity equal 0 SUB ---------------------- ---------------- ---------- 251 159 92 تم تعديل 1 نوفمبر 201213 سنة بواسطة HELL-BOY تقديم بلاغ
بتاريخ: 2 نوفمبر 201213 سنة comment_228619 السلام عليكم ورحمة الله وبركاتهأخي الكريمالكود التالي مع افتراض وجود تسلسل لعمليات الإدخالكما أن الكود التالي سوف يتجاهل التاريخمن 1/1/2012 حتى تاريخ 25/1/2012ومن 2/10/2012 حتى تاريخ 31/12/2012لذلك يجب أن يكون رصيد أول المدة (1/1/2012) ورصيد أخر المدة (31/12/2012) Select max(aaa.dat) , min(aaa.dat) , (max(aaa.dat) - min(aaa.dat)) , (nvl(max(aa.zero),0)) , (max(aaa.dat) - min(aaa.dat) - (nvl(max(aa.zero),0)) ) netday From aaa , ( select sum(a.dat - aaa.dat ) zero from aaa , (select id , dat from aaa where id in (select (id+1) id from aaa where qty = 0 )) a where aaa.id = a.id-1 order by aaa.dat ) aa ; Select max(aaa.dat) , min(aaa.dat) , (max(aaa.dat) - min(aaa.dat)) , (nvl(max(aa.zero),0)) , ( max(aaa.dat) - min(aaa.dat) - (nvl(max(aa.zero),0)) ) netday From aaa , ( select sum(a.dat - aaa.dat ) zero from aaa , (select id , dat from aaa where id in (select (id+1) id from aaa where qty = 0 and aaa.dat > &mindat and aaa.dat < &maxdat)) a where aaa.id = a.id-1 order by aaa.dat ) aa where aaa.dat > &mindat and aaa.dat < &maxdat ; جزاك الله كل خير تقديم بلاغ
بتاريخ: 2 نوفمبر 201213 سنة كاتب الموضوع comment_228631 طيب جرب الكود دا SELECT (MAX (F_date) - MIN (F_date)) "quantity greater than 0", QTYZERO.COUNT "quantity equal 0", (MAX (F_date) - MIN (F_date)) - QTYZERO.COUNT "SUB" FROM (SELECT date_q F_date FROM test WHERE qty <> 0), (SELECT SUM ( (SELECT MIN (date_q) DATE_Q FROM test WHERE qty <> 0 AND TO_DATE (date_q, 'dd-mm-rrrr') > TO_DATE (E.DATE_Q, 'DD-MM-RRRR')) - E.DATE_Q) "COUNT" FROM TEST E WHERE QTY = 0) QTYZERO GROUP BY QTYZERO.COUNT quantity greater than 0 quantity equal 0 SUB ---------------------- ---------------- ---------- 251 159 92 جزاك الله خيراً وزادك علماًأنا جربت هذا الكود واشتغل معايا SELECT ( MAX(F_DATE) - MIN(F_DATE) ) "ALL", QTYZERO.COUNTT "QTY=0", ( MAX(F_DATE) - MIN(F_DATE) ) - QTYZERO.COUNTT "QTY>0" FROM (SELECT TDATE F_DATE FROM TEST), (SELECT SUM((SELECT MIN(TDATE) TDATE FROM TEST WHERE TQTY!=0 AND TDATE>E.TDATE)-E.TDATE) "COUNTT" FROM TEST E WHERE TQTY=0) QTYZERO GROUP BY QTYZERO.COUNTT والحمد لله أعطى النتائج الصحيحة : ALL QTY=0 QTY>0 ---------------------- ---------------------- ---------------------- 251 159 92 شكراً لك من شارك في هذا الموضوع بطرح الحول وكل القائمين على هذا الموقعوأخص بالشكر الأخ الكريم HELL-BOY على طرح الحل المناسب تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.