从更改

时间:2018-02-22 08:53:33

标签: postgresql

我有一个由products(带有ID,~15k记录)和另一个表price_changes(约88m记录)组成的表,记录给定{price的变化productID 1}}在给定的changedate

我现在对每个产品在给定时间点的价格感兴趣(比如一年中每2小时一次,总共约4300点;总共产生约6400万个数据点)。虽然在给定时间确定给定产品的价格非常直接,但确定所有64m数据点似乎非常耗时。

我的方法是使用感兴趣的数据点预先填充新的目标表fullprices

insert into fullprices(obsdate,productID) 
    select  obsdate, productID from targetdates, products 

然后在这个新表中更新每个价格观察,如下所示:

update fullprices f set price = (select price from price_changes where 
                           productID = f.productID and date < f.obsdate
                           order by date desc
                           limit 1)

应该给我每个时间点的最新价格变化。

不幸的是,这需要......好吧,年龄。有没有更好的方法呢?

==编辑:我的表创建如下:==

CREATE TABLE products
(
   productID uuid NOT NULL,
   name text NOT NULL,  
   CONSTRAINT products_pkey PRIMARY KEY (productID )
);

CREATE TABLE price_changes
(
    id integer NOT NULL,
    productID uuid NOT NULL,
    price smallint,
    date timestamp NOT NULL
);

CREATE INDEX idx_pc_date
    ON price_changes USING btree
    (date);

CREATE INDEX idx_pc_productID
    ON price_changes USING btree
    (productID);

CREATE TABLE targetdates
(
    obsdate timestamp
);

CREATE TABLE fullprices
(
     obsdate timestamp NOT NULL,
    productID uuid NOT NULL,
    price smallint
);

0 个答案:

没有答案