我试图找到一个' ID'的金额总和。距离DT'尾随365天。以下是我正在处理的数据的示例。下表包括购买日期,ID和金额。我想计算从DT' DT开始365天的ID所花费的金额。任何有关这方面的帮助将不胜感激。感谢。
DT ID AMT
1/17/15 1 31.74
1/23/15 1 14.33
1/25/15 1 21.76
3/5/15 1 150
6/12/15 1 60
4/23/16 1 16.86
4/25/16 1 60
7/1/16 1 15.57
2/26/15 2 61.9
3/1/15 2 15
2/28/16 2 25
我希望我的输出
DT ID AMT outstanding_amt
1/17/15 1 31.74 31.74
1/23/15 1 14.33 46.07
1/25/15 1 21.76 67.83
3/5/15 1 150 217.83
6/12/15 1 60 277.83
4/23/16 1 16.86 76.86
4/25/16 1 60 136.86
7/1/16 1 15.57 92.43
2/26/15 2 61.9 61.9
3/1/15 2 15 76.9
2/28/16 2 25 40
我尝试了sum(amt) over(partition by user_id)
,但这给了我所有日期的累计金额。我不知道如何用日期条件来调节它
答案 0 :(得分:2)
一种方法是相关子查询:
select t.*,
(select sum(t2.amt)
from t t2
where t2.id = t.id and
t2.dt <= t.dt and
t2.dt > t.dt - interval '365' day
) as outstanding_amt
from t;
这可能具有合理的性能,索引位于(id, dt, amt)
。
答案 1 :(得分:0)
我将像下面的示例一样更改order by子句。
select dt
, id
, amt
, sum(amt) over(order by dt rows unbounded preceding) as rollingsum
from table
where 1=1
and dt between current_date - 365 and current_date