Postgres,为每个缺失的日子添加新行

时间:2013-12-17 22:31:53

标签: postgresql date row line add

原谅可能是一个愚蠢的问题,但我不是一个数据库专家。

我有这张表:

id_data(serial)| udate(日期)

1               | 1984-02-10   
2               | 1984-02-12
3               | 1984-02-15

我想为每个缺失的日子添加新行 直到今天 ,像这样:

id_data(serial)| udate(日期)

*               | 1984-02-10   
*               | 1984-02-11
*               | 1984-02-12
*               | 1984-02-13
*               | 1984-02-14
*               | 1984-02-15
...             | 2013-12-17 (today)

有可能吗? 提前致谢!

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~

Nb:表2显示了udate

的select * from table order

编辑:这是一个非常小的例子,因为我无法在1984年到2013年之间发布一个完整的例子,直到今天每个错过的日子。主要目标是在下表中说明我需要的内容。

1 个答案:

答案 0 :(得分:1)

您可以使用generate_series()生成空行:

select d::date
from generate_series(timestamp '1984-02-10',
                     timestamp '1984-02-15',
                     interval '1 day') d;

对于id生成,如果您不想使用表中的那个,请创建一个[临时]序列:

create temporary sequence tmp_id_data_seq start with 4;

然后,您可以生成新的ID:

select nextval('tmp_id_data_seq');

然后外连接两个:

select coalesce(data.id_data, nextval('tmp_id_data_seq')) as id_data,
       d::date as udate
from generate_series(timestamp '1984-02-10',
                     timestamp '1984-02-15',
                     interval '1 day') dates (d)
left join data on data.udate = dates.d::date;

当然,您需要根据需要调整两个边界和起始值。