كيف أختار مين/ماكس التواريخ من الجدول 2 على أساس التاريخ في الجدول 1?

StackOverflow https://stackoverflow.com/questions/1641988

سؤال

علي الشهري الجدول (فقط يحمل الصفوف مع أول يوم من الشهر ، و فريدة من نوعها القيد حتى واحد فقط من كل) و الجدول اليومي مع معلومات مماثلة عن كل يوم (نفس صفقة واحدة فقط في اليوم الواحد):

Monthly table       Daily table
-------------       -----------
2009-01-01          2009-01-01
2009-02-01          2009-01-02
: :                 : :
2009-09-01          2009-01-31
                    2009-02-01
                    : :
                    2009-02-28
                    2009-03-01
                    : :
                    2009-09-01

ولكن قد تكون هناك أيام في عداد المفقودين.

أريد تشغيل استعلام الذي يعود لكل التاريخ في شهري الجدول ، أن التاريخ جنبا إلى جنب مع الحد الأدنى والحد الأقصى مواعيد هذا الشهر في الجدول اليومي (باستخدام SQL القياسية ويفضل من DB2 محددة عند الضرورة القصوى).

لذلك ، إذا كان الأسبوع الأخير من كانون الثاني / يناير والأسبوع الأول من شباط / فبراير مفقود ، أنا بحاجة إلى:

MonthStart  FirstDay    LastDay
----------  ----------  ----------
2009-01-01  2009-01-01  2009-01-24
2009-02-01  2009-02-08  2009-02-28
: :
2009-09-01  2009-09-01  2009-01-30

هنا الاستعلام علي:

select m.date as m1,               
       dx.d1 as m2,                          
       dx.d2 as m3                           
from   monthly m,              
       ( select min(d.date) as d1,
                max(d.date) as d2        
         from   daily d            
         where  month(d.date) = month(m.date)
         and    year(d.date) = year(m.date)    
       ) as dx;

ولكن أنا الحصول على خطأ:

DSNT408I SQLCODE = -206, ERROR: M.DATE IS NOT A COLUMN OF
AN INSERTED TABLE, UPDATED TABLE, OR ANY TABLE IDENTIFIED
IN A FROM CLAUSE, OR IS NOT A COLUMN OF THE TRIGGERING
TABLE OF A TRIGGER
DSNT418I SQLSTATE = 42703 SQLSTATE RETURN CODE

هل من أحد لديه أي نصيحة حول أفضل طريقة للقيام بذلك ؟

هل كانت مفيدة؟

المحلول

SELECT m.date as m1,               
       MIN(d.date) as m2,                          
       MAX(d.date) as m3
       -- COUNT(d.date) as NbOfDays  -- if so desired...                          
FROM monthly m
JOIN daily d ON month(d.date) = month(m.date) and year(d.date) = year(m.date) 
WHERE -- some condition
GROUP BY m.date
ORDER BY m.date -- or something else...

علما أن هذا النوع من الاستعلام (مثل تلك الأخرى المعروضة في السؤال و في الردود حتى الآن بطيئة نسبيا ، كما أنها تعني مسح الطاولة حتى شهر(x) و السنة(x) يمكن أن تحسب لكل [التصفيات] الصف.(أيوضع مجموعة على التاريخ في جملة WHERE بالطبع مساعدة).إذا كان هذا النوع من الاستعلام ركض كثيرا و إذا كان حجم الجدول مهم اناt قد يكون من المفيد إضافة عمود لهذه احتساب القيم (أو ربما جنبا إلى جنب قيمة (السنة-الشهر) بحيث لا حساب لا لزوم لها ولكن الأساسية العمود(s) يمكن فهرستها.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top