如何在PostgreSQL中插入缺失列的值?

如何在PostgreSQL中插入缺失列的值?,sql,postgresql,Sql,Postgresql,我的PostgreSQL 9.5数据库中有两个表,即tbl1和tbl2。tbl1包含不带时区的数据时间戳,如: Start_time 1996-06-07 00:00:00 1997-02-03 00:00:00 2000-07-09 00:00:00 tbl2包含如下值: ID. veh_1995 veh_2000 1 200 425 2 400 478

我的PostgreSQL 9.5数据库中有两个表,即tbl1和tbl2。tbl1包含不带时区的数据时间戳,如:

Start_time              
1996-06-07 00:00:00     
1997-02-03 00:00:00     
2000-07-09 00:00:00
tbl2包含如下值:

ID.    veh_1995    veh_2000    
1      200         425         
2      400         478         
3      150         300         
4      700         800         
5      900         1500
以下查询插入“tbl2”的“年份间缺失年份间隔”列的值:

 SELECT 
        veh_1995,
       (veh_1995 + (veh_2000 - veh_1995) * 0.2)::int AS veh_1996,
       (veh_1995 + (veh_2000 - veh_1995) * 0.4)::int AS veh_1997,
       (veh_1995 + (veh_2000 - veh_1995) * 0.6)::int AS veh_1998,
       (veh_1995 + (veh_2000 - veh_1995) * 0.8)::int AS veh_1999,
       veh_2000
 from tbl2
我需要修改上述查询,以便:

对于tbl1中的每个开始时间行,查询应该检查tbl2中是否有缺少的年份列 如果是,则插入那些缺少的列值,并返回所有列,这些列参考起始时间中的年份 预期产出:

Year          value
1996          ...
1997          ...
2000          ...

如果有人能帮我修改上述查询以获得所需的输出,我将不胜感激。

这或多或少是您想要的吗

with yrs as (
    select
        t2.*,
        start_time,
        generate_series(cast(extract(year from start_time) as integer), 2000) as interp_yr
    from
        tbl2 as t2,
        tbl1 as t1
    where
        extract(year from start_time) between 1995 and 2000
    )
select
    iy.*,
    veh_1995 + (veh_2000 - veh_1995) * (interp_yr - 1995)/5 as interp_val
from
    yrs as iy;

您对预期输出的描述是否完整?您的短语return all columns(返回起始时间中的年份)表明您也希望在输出中使用起始时间。还可以考虑,一年中具有独立列的输出格式和值可以更好地表示数据,更容易产生TBL2的相同值。原则上,我希望在开始时间为每年选择值。如果缺少一些年份,则查询插值并返回开始时间中所有年份的值。因此,它可以被输出。只需编辑所需的输出。