Запрос SQL: значения SUM до текущей записи - PullRequest
4 голосов
/ 04 мая 2010

В основном, имея эту таблицу:

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 ]

3 голосов
/ 04 мая 2010

Если у вас есть два столбца, первичный ключ с именем 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 для его создания.

2 голосов
/ 04 мая 2010

Это называется промежуточным итогом.

Если у вас есть столбец datetime, вы можете использовать что-то вроде этого:

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
0 голосов
/ 07 ноября 2018

Один из вариантов - использовать оконные функции

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/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...