【发布时间】:2010-12-11 03:35:47
【问题描述】:
我有一个月度表(仅包含具有每月第一天的行,并且具有唯一约束,因此每个行只有一个)和一个每日表,其中每天都有类似的信息(相同的交易,每天只有一个):
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 的 SQL)。
所以,如果缺少一月的最后一周和二月的第一周,我需要:
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 OFAN INSERTED TABLE, UPDATED TABLE, OR ANY TABLE IDENTIFIEDIN A FROM CLAUSE, OR IS NOT A COLUMN OF THE TRIGGERINGTABLE OF A TRIGGERDSNT418I SQLSTATE = 42703 SQLSTATE RETURN CODE
有人对如何最好地做到这一点有任何建议吗?
【问题讨论】:
标签: sql database select db2 subquery