【发布时间】:2015-10-26 12:07:47
【问题描述】:
我正在使用 DB2 SQL,其中我有一个参考日期 - 并且希望计算每个月差异 REF_DT 的任一侧(增加到 START_DT/END_DT)的不同个体 - 返回一行,带有月份计数器.
我的基础数据如下:
ID REF_DT START_DT END_DT
-- ------ -------- ------
1 2000-01-01 1998-01-01 2002-01-01
2 2001-06-01 2001-06-01 2003-06-01
3 2003-01-01 1998-01-01 2005-06-01
4 2002-05-01 2003-01-01 2005-01-01
所以取第一行,我在START_DT 和END_DT 之间存在的REF_DT 周围每个月返回一行,并返回monthdiff 的值。我的基表中的第一行将生成:
ID REF_DT START_DT END_DT MONTHDIFF
-- ------ -------- ------ ---------
1 2000-01-01 1998-01-01 2002-01-01 -24
1 2000-01-01 1998-01-01 2002-01-01 -23
.
.
.
1 2000-01-01 1998-01-01 2002-01-01 24
即将产生 48 行,因为 START_DT 和 END_DT 是 REF_DT 两侧的 24 个月
我可以通过查询来查询此查询,即
select distinct id, ref_dt,start_dt,end_dt,
case when ref_dt - 1 month between start_dt and end_dt then -1 end as monthdiff
但是,我必须为每个查询手动创建 1 行。我希望将这个逻辑嵌入到比这更聪明的东西中。
谢谢。
已解决
请参阅 Juan 的建议以获取答案。为月份参考创建一个表的想法奏效了。我通过查看以下堆栈线程 generate_series() equivalent in DB2
创建了此表【问题讨论】:
-
REF_DT,START_DT和END_DT对你想要的输出中的所有MONTHDIFF都一样吗? -
@Juan - 并不是每个人都不同。但是我不介意事先指定固定的边界,例如 5 年左右,因为我知道这将捕获我的所有数据
-
我的意思是在你的输出结果中。 4 第一列完全相同