首页 > 解决方案 > 如何通过在 postgres 中生成月份来复制行

问题描述

我有一张包含客户详细信息的表格 表格客户:

CID CNAME
1    Abc
2    Def
3    Ghi

我想在此表中添加一个月列,并在选择语句中复制每个月的所有行。必须根据当前日期生成月份。

预期输出

Month      CID CNAME
2019-01-01 1    Abc
2019-01-01 2    Def
2019-01-01 3    Ghi
2019-02-01 1    Abc
2019-02-01 2    Def
2019-02-01 3    Ghi
2019-03-01 1    Abc
2019-03-01 2    Def
2019-03-01 3    Ghi

标签: sqlpostgresql

解决方案


您正在寻找generate_series(). 我会这样做:

select gs.month, t.*
from t cross join
     generate_series('2019-01-01'::date, '2019-03-01'::date, interval '1 month') gs(month)
order by gs.month, t.cid;

推荐阅读