如何为此构建SQL查询...?

时间:2016-01-20 11:25:27

标签: sql

我想做一些数学运算,但是对于当时的每一行。

例如:

A         B        C         D
-------------------------------
100      -50       =50      20160101 
100       0        =150     20160102
100      -50       =100     20160103

所以基本上C列总是所有过去A +(B)列的总和,但不是未来的列。有没有人知道如何在SQL中实现这一点?

我可以在代码中执行此操作,但我想在SQL中执行此操作,只在表中显示结果。

P.S。我的英语不是最好的,所以请随意问我是否不够清楚。

1 个答案:

答案 0 :(得分:4)

这称为累积或运行总和。常规方法使用ANSI标准窗口函数:

select a, b,
       sum(a + b) over (order by d) as c,
       d
from t;

如果您的SQL版本不支持窗口函数,那么您可以使用相关子查询(性能通常会更差):

select a, b,
       (select sum(a + b) from t t2 where t2.d <= t.d) as c,
       d
from t;