كيف أختار مين/ماكس التواريخ من الجدول 2 على أساس التاريخ في الجدول 1?
سؤال
علي الشهري الجدول (فقط يحمل الصفوف مع أول يوم من الشهر ، و فريدة من نوعها القيد حتى واحد فقط من كل) و الجدول اليومي مع معلومات مماثلة عن كل يوم (نفس صفقة واحدة فقط في اليوم الواحد):
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) يمكن فهرستها.