创建一个包含值序列的表,而无需手动插入每个值

时间:2013-08-10 16:01:15

标签: sql postgresql

我(我想)我想创建一个包含序列的视图或临时表。 此表的目的仅仅是提供制作面板数据集所需的值。 我想要做的是以编程方式创建此序列,使用两个句点(如0和365)之间的每个值,间隔为7(例如,制作每周面板)。 以下是如何进行手动"手动插入每个截止日期。

create table time_periods (day_cutoff int); 
insert into time_periods values (7); 
insert into time_periods values (14); 
insert into time_periods values (28); 
insert into time_periods values (35); 
insert into time_periods values (42); 

然后将此表用作(在billing_records的基础表上进行完整的笛卡尔联接,其中包含进行结算的临时实例。

select 
buyer
, seller
, day_cutoff
, sum(case when billing_day < day_cutoff 
      then amount 
      else 0.0 end) as cumulative_spend
from time_periods 
left join billing_records 
on 1 = 1 
group by buyer, seller, day_cutoff 

1 个答案:

答案 0 :(得分:2)

您可以使用generate_series

select *
from generate_series(7, 42, 7);

记录在案here

以下是编写查询的一种方法:

select buyer, seller, day_cutoff,
       sum(case when br.billing_day < day_cutoff then amount else 0.0 end) as cumulative_spend
from billing_records br cross join
     generate_series(7, 42, 7) as day_cutoff
group by buyer, seller, day_cutoff ;