У меня есть месячная таблица (содержит только строки с первым днем месяца и уникальным ограничением, поэтому только по одному для каждого) и дневная таблица с похожей информацией для каждого дня (та же сделка, только одна в день):
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
У кого-нибудь есть советы, как лучше всего это сделать?