SQL Server - 添加或减去先前的值

标签 sql sql-server database add subtraction

我正试图从这些数据中取得平衡

Date           Logged      Closed
-------------- ----------- -----------
1-Jan-2016     0           0
2-Jan-2016     8           7
3-Jan-2016     8           8
4-Jan-2016     25          11
5-Jan-2016     20          16
6-Jan-2016     14          13
7-Jan-2016     10          12
8-Jan-2016     9           7
9-Jan-2016     12          12
10-Jan-2016    3           4

预期的输出是

Date           Logged      Closed      Balance
-------------- ----------- ----------- ----------
1-Jan-2016     0           0           0
2-Jan-2016     8           7           1 
3-Jan-2016     8           8           1
4-Jan-2016     25          11          15
5-Jan-2016     20          16          19
6-Jan-2016     14          13          20
7-Jan-2016     10          12          18
8-Jan-2016     9           7           20
9-Jan-2016     12          12          20
10-Jan-2016    3           4           27

公式是 BALANCE = 上一个余额 + 已记录 - 已关闭。

示例公式:

Jan 5 Balance (15) = 1(prevBalance) + 25(currentLogged) - 11(currentClosed)

我试过这个公式,但没有得到接近预期的结果。

WITH CTE AS (
SELECT
rownum = ROW_NUMBER() OVER (ORDER BY Date),
Date, Logged, Closed
FROM Table
)

SELECT
(prev.Logged - prev.Closed)+ (a.Logged-a.Closed) as [Balance]
FROM CTE

LEFT JOIN CTE prev ON prev.rownum = CTE.rownum - 1

使用的其他引用资料

SQL Server - Calculate current row value using previous row value

http://blog.sqlauthority.com/2013/09/22/sql-server-how-to-access-the-previous-row-and-next-row-value-in-select-statement/

最佳答案

您可以使用窗口函数 sum 执行此操作。

试试这个:

select 
    t.*,
    sum(logged - closed) over (order by date) balance
from your_table t;

关于SQL Server - 添加或减去先前的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41576216/

相关文章:

mysql - 如何通过 DBIx 为多对多关系插入数据?

sql-server - 我无法在 SQL Azure 中使用数据库

sql - SCOPE_IDENTITY() 的同步问题

sql - MS SQL Server 与 Management Studio - 如何使用其数据编写表脚本(作为插入语句)?

php - Codeigniter 事件记录错误?查询构建器添加了一行

sql - 将 nvarchar 数据类型转换为日期时间数据类型导致值超出范围

php - 使用 MySQL 和 PHP 删除页面上的项目

sql - 来自完整加载表的 Valid_from Valid_to

java - 让用户通过应用程序连接数据库的正确方法

javascript - 在nodejs for循环中插入语句?