我在一个季度内定义了1个月的数据点,并且需要在该季度的所有月份中复制数据,依此类推所有月份。例如,我的数据是:
month_start C1 C2
2017-01-01 10 21
2017-01-01 17 42
2017-01-01 22 7
2017-04-01 13 6
2017-04-01 8 99
现在我想更改它,以便根据month_start在季度内复制数据,如下所示:
month_start C1 C2
2017-01-01 10 21
2017-01-01 17 42
2017-01-01 22 7
2017-02-01 10 21
2017-02-01 17 42
2017-02-01 22 7
2017-03-01 10 21
2017-03-01 17 42
2017-03-01 22 7
2017-04-01 13 6
2017-04-01 8 99
2017-05-01 13 6
2017-05-01 8 99
2017-06-01 13 6
2017-06-01 8 99
出于报告目的,我需要这样做,因为报告是月度报告。关于如何实现这一点的任何想法。如果您有任何其他问题,请与我们联系。
答案 0 :(得分:0)
您可以使用函数generate_series()
:
with my_table(month_start, C1, C2) as (
values
('2017-01-01'::date, 10, 21),
('2017-01-01', 17, 42),
('2017-01-01', 22, 7),
('2017-04-01', 13, 6),
('2017-04-01', 8, 99)
)
select ms::date as month_start, c1, c2
from my_table
cross join generate_series(month_start, month_start+ interval '2 months', '1 month') ms
order by month_start, row_number() over (order by month_start);
month_start | c1 | c2
-------------+----+----
2017-01-01 | 10 | 21
2017-01-01 | 17 | 42
2017-01-01 | 22 | 7
2017-02-01 | 10 | 21
2017-02-01 | 17 | 42
2017-02-01 | 22 | 7
2017-03-01 | 10 | 21
2017-03-01 | 17 | 42
2017-03-01 | 22 | 7
2017-04-01 | 13 | 6
2017-04-01 | 8 | 99
2017-05-01 | 13 | 6
2017-05-01 | 8 | 99
2017-06-01 | 13 | 6
2017-06-01 | 8 | 99
(15 rows)
请注意,row_number()
仅用于保留行的原始排序顺序。