自用户购买之日起365天后的总和

时间:2016-08-03 15:57:05

标签: sql teradata window-functions

我试图找到一个' 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),但这给了我所有日期的累计金额。我不知道如何用日期条件来调节它

2 个答案:

答案 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