如何计算参考日期前后每个月的产量

how do produce counts for every month around a reference date

我正在使用 DB2 SQL,其中我有一个参考日期 - 并且想计算 [=] 的每个月差异(增加到 START_DT/END_DT)的不同个体43=] - return 一行,带有月份计数器。

我的基础数据如下:

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

所以拿第一行,我 return 每个月在 START_DTEND_DT 和 return 之间存在的 REF_DT 一行monthdiff 的值。我的基础 table 中的第一行将生成:

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_DTEND_DTREF_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 的建议以获取答案。为月份参考创建 table 的想法奏效了。我通过查看以下堆栈线程 generate_series() equivalent in DB2

创建了这个 table

简单的方法是创建一个月 table。 100 年需要 1200 行

所有月份

 month_id
 date 

How can I get a table of dates from the first day of the month, two months ago, to yesterday?

SELECT 
      YT.id, 
      YT.ref_dt, 
      YT.start_dt, 
      YT.end_dt, 
      MONTHS_BETWEEN(YT.ref_dt, allDates.date) as MONTHDIFF
FROM YourTable YT
INNER JOIN allDates
        ON allDates BETWEEEN YT.START_DT AND YT.END_DT