【发布时间】:2019-01-23 00:17:58
【问题描述】:
我有以下数据(表 1),我想计算每个博彩日期结束时的余额。但是,当赎回日期小于博彩日期时,这意味着需要从期末余额中减去该金额。如何编写一个语句,查看特定行中的游戏日期和所有先前行中的兑换日期,并获取游戏日期大于兑换日期的行的总和(表 2) Table2
表1
DateRedeemed GamingDate Trip Amount
13/07/2017 03/07/2017 8001 100
17/07/2017 03/07/2017 8001 150
18/07/2017 04/07/2017 8001 125
27/07/2017 16/07/2017 8001 250
28/07/2017 16/07/2017 8001 310
27/07/2017 17/07/2017 8001 125
31/07/2017 18/07/2017 8001 75
28/07/2017 27/07/2017 8001 80
31/07/2017 28/07/2017 8001 100
表2
DateRedeemed GamingDate Trip Amount Running
13/07/2017 03/07/2017 8001 100 100
17/07/2017 03/07/2017 8001 150 250
18/07/2017 04/07/2017 8001 125 375
27/07/2017 16/07/2017 8001 250 525
28/07/2017 16/07/2017 8001 310 835
27/07/2017 17/07/2017 8001 125 810
31/07/2017 18/07/2017 8001 75 760
28/07/2017 27/07/2017 8001 80 590
31/07/2017 28/07/2017 8001 100 610
【问题讨论】:
-
请以文本格式而不是带有示例数据的图像。
-
您将需要使用窗口函数。
select *, amount - sum(amount) over (order by GamingDate)或一些变体。 -
在@scsimon 上面发布的代码中添加一个 case 表达式以适应负值,这应该完全符合您的需要。我建议您的数据设计有点脆弱,使用两个日期列来指示正值或负值。不知道如何提供建议,因为目前还不清楚这是要做什么。
-
我是否正确理解第四条记录的“正在运行”等于 525 (150+125+250),因为第一条记录不计算在内,因为它的 DateRedeemed 为 2017 年 7 月 13 日低于 2017 年 7 月 16 日的 GamingDate?
-
@LukStorms 正确
标签: sql sql-server tsql