PostgreSQL genarate_series レコード複数行生成

PostgreSQLでは、テーブルにない値を複数行レコードにわたって生成する事が可能。

generate_series

を利用して、今月から1年前から3か月間の月を取得しYYYYMM形式で表示(例 2016/3/1 ⇒ 201603)し、さらにtable1にあるcdにそれぞれYYYYMMがあるレコードを生成する。JOINしない事でそれぞれのレコードに対して3か月間の月にあたるYYYYMMレコードを生成する。YYYYMMは文字列ではなくintegerで扱いたい。

SELECT cd,tsuki
FROM
table1,
(select to_number(to_char(date_trunc(‘month’, now() – interval ‘1 month’ * s.a) – interval ‘1 year’,’YYYYMM’),’999999′) as tsuki
from generate_series(0,2) as s(a)) as t_date