az123 بتاريخ: 30 أكتوبر 2012 تقديم بلاغ مشاركة بتاريخ: 30 أكتوبر 2012 السلام عليكم ورحمة الله وبركاتهكيف يمكن تحديد عدد الأيام بين تاريخين بشرط معين؟مثلاً يوجد جدول به هذه البياناتالتاريخ الكمية25/01/12 2010/02/12 815/04/12 023/07/12 1503/08/12 002/10/12 11المطلوب: كيف يمكن حساب عدد الأيام التي تكون الكمية فيها لا تساوي صفر بين اول تاريخ وآخر تاريخ ؟ياريت يكون في رد سريع من اي حد عنده فكرةوشكراً اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
khaledhere بتاريخ: 30 أكتوبر 2012 تقديم بلاغ مشاركة بتاريخ: 30 أكتوبر 2012 select count(start_date) , count(end_date)from tablewhere qty !=0; اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
az123 بتاريخ: 31 أكتوبر 2012 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 31 أكتوبر 2012 (معدل) select count(start_date) , count(end_date)from tablewhere qty !=0; السلام عليكم ورحمة الله وبركاتهأخي الفاضل شكراً لردك ومحاولة المساعدةولكن هذا الحل غير المطلوبcount تحسب عدد التواريخ فقطالمطلوب هو حساب عدد الأيام بين أول تاريخ وآخر تاريخ مع استبعاد (او طرح) الأيام التي تكون فيها الكمية = 0 ((من المثال الموجود في المشاركة الأولى))ياريت يكون في رد سريع من اي حد عنده فكرةوشكراً تم تعديل 31 أكتوبر 2012 بواسطة az123 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
ahmedbb بتاريخ: 31 أكتوبر 2012 تقديم بلاغ مشاركة بتاريخ: 31 أكتوبر 2012 السلام عليكماتفضل الحل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 نهاية الفترةجرب وادعيلىمعكم ولكم نتواصل اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
az123 بتاريخ: 31 أكتوبر 2012 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 31 أكتوبر 2012 السلام عليكماتفضل الحل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 ((من المثال الموجود في المشاركة الأولى)) اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
ahmedbb بتاريخ: 31 أكتوبر 2012 تقديم بلاغ مشاركة بتاريخ: 31 أكتوبر 2012 اوكشكرامع انى مجربه وشغال اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
m_ahmed بتاريخ: 31 أكتوبر 2012 تقديم بلاغ مشاركة بتاريخ: 31 أكتوبر 2012 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 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
jamal_rrkk بتاريخ: 31 أكتوبر 2012 تقديم بلاغ مشاركة بتاريخ: 31 أكتوبر 2012 السلام عليكم ورحمة الله وبركاته 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 ; جزاك الله كل خير اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
eslam4444 بتاريخ: 31 أكتوبر 2012 تقديم بلاغ مشاركة بتاريخ: 31 أكتوبر 2012 قم بتجربه الداله بها ماطلبت 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; اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
HELL-BOY بتاريخ: 31 أكتوبر 2012 تقديم بلاغ مشاركة بتاريخ: 31 أكتوبر 2012 المطلوب هو حساب عدد الأيام بين أول تاريخ وآخر تاريخ مع استبعاد (او طرح) الأيام التي تكون فيها الكمية = 0 ((من المثال الموجود في المشاركة الأولى)) يعني انت عايز تجمع كل الايام اللي فيها بضاعه وبعد كدا تطرحه من الايام اللي مفيهاش بضاعه اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
az123 بتاريخ: 1 نوفمبر 2012 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 1 نوفمبر 2012 (معدل) المطلوب هو حساب عدد الأيام بين أول تاريخ وآخر تاريخ مع استبعاد (او طرح) الأيام التي تكون فيها الكمية = 0 ((من المثال الموجود في المشاركة الأولى)) يعني انت عايز تجمع كل الايام اللي فيها بضاعه وبعد كدا تطرحه من الايام اللي مفيهاش بضاعه نعم بالظبط كده تم تعديل 1 نوفمبر 2012 بواسطة az123 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
az123 بتاريخ: 1 نوفمبر 2012 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 1 نوفمبر 2012 (معدل) 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 نوفمبر 2012 بواسطة az123 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
HELL-BOY بتاريخ: 1 نوفمبر 2012 تقديم بلاغ مشاركة بتاريخ: 1 نوفمبر 2012 طيب جرب كدا الحل دا وقولي 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 اسم عمود التواريخ اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
az123 بتاريخ: 1 نوفمبر 2012 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 1 نوفمبر 2012 (معدل) طيب جرب كدا الحل دا وقولي 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 نوفمبر 2012 بواسطة az123 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
eslam4444 بتاريخ: 1 نوفمبر 2012 تقديم بلاغ مشاركة بتاريخ: 1 نوفمبر 2012 معنى كلامك انت عندك فقط عمود واحد بس بتسجل فى التاريخ ولا عمودين بتسجل فيه بدايه الفترة ونهايتها؟ اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
az123 بتاريخ: 1 نوفمبر 2012 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 1 نوفمبر 2012 معنى كلامك انت عندك فقط عمود واحد بس بتسجل فى التاريخ ولا عمودين بتسجل فيه بدايه الفترة ونهايتها؟ عمود واحد فقط للتاريخ وعمود آخر فيه الكمية اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
HELL-BOY بتاريخ: 1 نوفمبر 2012 تقديم بلاغ مشاركة بتاريخ: 1 نوفمبر 2012 (معدل) طيب جرب الكود دا 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 نوفمبر 2012 بواسطة HELL-BOY 1 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
jamal_rrkk بتاريخ: 2 نوفمبر 2012 تقديم بلاغ مشاركة بتاريخ: 2 نوفمبر 2012 السلام عليكم ورحمة الله وبركاتهأخي الكريمالكود التالي مع افتراض وجود تسلسل لعمليات الإدخالكما أن الكود التالي سوف يتجاهل التاريخمن 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 ; جزاك الله كل خير اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
az123 بتاريخ: 2 نوفمبر 2012 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 2 نوفمبر 2012 طيب جرب الكود دا 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 على طرح الحل المناسب 2 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
elnaggar بتاريخ: 5 نوفمبر 2012 تقديم بلاغ مشاركة بتاريخ: 5 نوفمبر 2012 السلام عليكم جرب الحل الى فى الملف q.txt اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Recommended Posts
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.