我有一个表,其中包含220亿行,并且要求我对某些指标进行30天的尾随总和,然后按天划分,然后乘积。我在网上找到的答案建议使用自连接来确定此尾随和,但是在一张很大的桌子上,我什至不愿从基于成本的角度对其进行测试。
有没有一种方法可以计算尾随总和而无需进行非常昂贵的自连接?
答案 0 :(得分:1)
您将使用窗口功能。如果每个日期有一行:
select t.*,
sum(val) over (partition by day, product
order by date
rows between 29 preceding and current row
) as sum_30
from t;
如果您想要30天并且可能存在间隔,则需要将日期转换为数字,您可以使用unix_date()
。那应该是:
select t.*,
sum(val) over (partition by day, product
order by unix_date(date)
range between 29 preceding and current row
) as sum_30
from t;