我正在尝试计算表important_stock_dates
中特定日期的一组股票的最近30天的交易量总和。表all_stock_dates
包含相同的股票,但交易量适用于所有日期,而不仅仅是特定日期。
示例数据
all_stock_dates
stockid, date, volume
0231245, 20060314, 153
0231245, 20060315, 154
2135411, 20060314, 23
important_stock_dates
stockid, date, thirtydaysprior
0231245, 20060314, 20060130
0231245, 20060315, 20060201
2135411, 20060314, 20060130
我的代码
create table sum_trading_volume as
select a.stockid, a.date, sum(b.volume) as thirty_day_volume
from important_stock_dates a, all_stock_dates b
where b.date<a.date AND b.date ge a.thirtydaysprior
group by a.stockid, a.date;
期望的结果
包含来自important_stock_dates
的所有观察结果的表格,其中还包含基于匹配的stockid和all_stock_dates
中的日期的前30天的总和。
问题
我遇到的问题是important_stock_dates
有1500万观察,all_stock_dates
有3.5亿。它耗尽了几百GB的交换文件运行此代码(最大化硬盘驱动器)然后中止。我无法看到如何优化代码。我无法在StackOverflow或Google上找到类似的问题。
答案 0 :(得分:4)
据推测,您想要的查询加入stockid
:
create table sum_trading_volume as
select isd.stockid, isd.date, sum(asd.volume) as thirty_day_volume
from important_stock_dates isd join
all_stock_dates asd
on isd.stockid = asd.stockid and
asd.date < isd.date and asd.date >= isd.thirtydaysprior
group by isd.stockid, isd.date;
如果这样有效,它可能会完成。