sql - 如何根据多条记录中存在的交易计算运行剩余余额/金额
问题描述
我正在尝试跟进礼品卡的销售和使用情况。我想计算每张卡的运行余额。
特异性:我使用的表包含所有已完成的交易。(每行一笔交易)我有一笔交易,但没有累进余额。
我如何添加一个新的冒号来计算每次交易后的余额(行)
在我的表中,我有许多卡号,有 2 种不同类型的事件(销售和使用)和每笔交易的金额,第一次交易总是指礼品卡的购买和初始金额,其他行指的是实际使用礼品卡的实际金额。
SELECT C_NUMBER,
CASE WHEN TRANSACTION_TYPE = 'VEN' THEN 'SALE' ELSE 'USE' END AS
[EVENT],
TRANSACTION_DATE, AMOUNT FROM CARDS_TRANSACTION
WHERE C_NUMBER in ( '111111111895' , '16222222225082' )
我期望以下输出:(新列计算事件类型“使用”的记录的差异,因为事件“销售”的剩余余额等于金额。
解决方案
您似乎想要一个累积总和:
select ct.*,
sum(case when event = 'SALE' then amount
when event = 'USE' then - amount
end) over (partition by number order by trans_date
) as balance
from cards_transaction ct;
推荐阅读
- java - REST API,不能在我的 URL 中输入“%20”或“+”作为空格。未获取 URL
- css - 当属于不同的行时,堆叠标签和控件“纵横交错”
- reactjs - 动画滚动到加载的元素
- ms-access - 查找空子报表并将其隐藏在 Access 报表中的属性/功能
- javascript - 为什么脚本在浏览器显示页面之前完成
- python - 更改 DataFrame 中的列
- python - Pandas 在 DateTime 多索引帧上滚动
- r - Spotfire - 有没有办法根据滑块属性控制值更新数据函数输入参数?
- php - 浏览器如何允许下载 php 文件而 wget 不允许?[MediaWiki安装]
- c++ - 获取与 Matlab 相机设置相似的结果的变换矩阵