在PostgreSQL中以编程方式在多个列值之间进行插值

时间:2016-08-25 21:02:05

标签: postgresql interpolation

我的PostgreSQL数据库中有一个表格,其中包含从1995年到2015年(差距为5年)销售的车辆数量的数据,如下所示:

ID.    veh_1995    veh_2000    veh_2005    veh_2010    veh_2015
1      200         425         526         725         623
2      400         478         1000        1500        2000
3      150         300         400         700         1100
4      700         800         1000        2000        5000
5      900         1500        1600        2000        2500

我想以编程方式插入缺失年份和所有ID的值,以便我从1995年到2015年拥有已售出车辆的记录数量。有人可以建议我怎么做吗? This question显示了两个值之间的插值,this link显示了psql方法的插值。但是,我正在寻找PostgreSQL Select查询解决方案,我不想去存储过程或基于psql的方法。我在基于Windows 7的机器上使用PostgreSQL 9.5版。

1 个答案:

答案 0 :(得分:2)

由于插值很简单(您事先知道插值点在年份维度上的位置),因此查询非常简单:

SELECT id,
       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,
       ... -- add similar lines to interpolate other years
       veh_2015
FROM my_table;