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年间的完整示例,直到今天为止的每个错过日期。主要目标是展示我在桌下所需要的东西。
答
可以使用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;
当然,您需要根据需要调整上述两个边界和起始值。
是的,但你的例子显示重复的ID数据,你说是串行的,所以它不会被允许 - 我可以编写一个查询来生成新的日期和NEW(附加)ID,但没有重复的ID。当我查看预期结果的ID列时,我无法确定您使用哪种逻辑来生成这些逻辑。 –
其实我搜索任何日期的查询,而不仅仅是这一个。 我会在我的主题添加这个,使其更加准确:) – Leasye
您的查询与新的日期可能是相当不错的,不要介意与ID我只需要一个查询与新表在我的表中缺少的日子 – Leasye