SQL查询:SUM值最多为当前记录

时间:2010-05-04 09:45:49

标签: sql sql-server sum

基本上,有这个表:

12.10
 2.35
21.45
35.26

我想在每条记录中计算所有先前记录的总和,如下所示:

12.10 | 12.10
 2.35 | 14.45
21.45 | 35.90
35.26 | 71.16

3 个答案:

答案 0 :(得分:3)

假设您有两列,一个名为id的主键和一个名为value的列,那么您可以使用此列:

SELECT T1.id, SUM(T2.value)
FROM table1 T1
JOIN table1 T2
ON T2.id <= T1.id
GROUP BY T1.id

如果您没有任何唯一标识符(为什么不?),那么您可以使用ROW_NUMBER创建一个。

答案 1 :(得分:2)

这称为跑步总数。

如果您有日期时间列,可以使用以下内容:

SELECT t1.id, t1.transactiondatetime, amount,
(
 SELECT SUM(amount) 
 FROM dbo.table1 as t1 
 WHERE t1.transactiondatetime <= t0.transactiondatetime
) AS balance
FROM dbo.table1 AS t0

答案 2 :(得分:0)

一种选择是使用窗口功能

SELECT id, data_size, 
SUM(data_size) OVER (ORDER BY ID) total_size
FROM files;

那么结果如下

ID         DATA_SIZE  TOTAL_SIZE
---------- ---------- ----------
104427       3977       3977
104428     118948     122925
104429        847     123772
104430       2145     125917
104431       2688     128605
104432       3798     132403
104433       3110     135513
104434       5534     141047
104435       3956     145003

9 rows selected. 

如您所见,它汇总了所有先前的DATA_SIZE列值

来源:http://etutorials.org/SQL/Mastering+Oracle+SQL/Chapter+14.+Advanced+Analytic+SQL/14.3+Windowing+Functions/