如何计算参考日期前后每个月的产量
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_DT
和 END_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_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 的建议以获取答案。为月份参考创建 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
我正在使用 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_DT
和 END_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_DT
和 END_DT
是 REF_DT
我可以通过查询即
到这个查询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