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

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

问题描述:

原谅可能是一个愚蠢的问题,但我不是一个数据库大师。Postgres,为每一个缺失的日子添加新行

我有这个表:

id_data(串行)| uDate公司(日期)

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

而且我想对每个缺少的天增加新的生产线直到今天 ,像这样的:

id_data(串行)|更新(日期)

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

这可能吗? 在此先感谢!

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

注:表2显示了一个SELECT * FROM由uDate公司

编辑表顺序:这是一个非常小的,因为为例我不能发布1984年至2013年间的完整示例,直到今天为止的每个错过日期。主要目标是展示我在桌下所需要的东西。

+0

是的,但你的例子显示重复的ID数据,你说是串行的,所以它不会被允许 - 我可以编写一个查询来生成新的日期和NEW(附加)ID,但没有重复的ID。当我查看预期结果的ID列时,我无法确定您使用哪种逻辑来生成这些逻辑。 –

+0

其实我搜索任何日期的查询,而不仅仅是这一个。 我会在我的主题添加这个,使其更加准确:) – Leasye

+0

您的查询与新的日期可能是相当不错的,不要介意与ID我只需要一个查询与新表在我的表中缺少的日子 – Leasye

可以使用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; 

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

+0

谢谢丹尼斯给你回答。 Generate_serie似乎是一个很好的项目! 我有一个问题与你第四个查询,数字4与选择coalesce ...不起作用(错误:id_data不存在) – Leasye

+0

您命名序列'tmp_id_data_seq3'? –

+0

对不起没有它的tmp_id_data_seq,但不工作:( – Leasye