我有一个由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
);