如何用postgresql 语句实现数据的累加

发布于 2022-09-11 16:27:26 字数 2752 浏览 16 评论 0

假设现在有两张表,第一张表叫做prepay_card 表示的是预付卡,第二张表是prepay_card_transition表示的预付卡的交易

我们的第一张表prepay_card的表结构是这样的:

ColumnTypeCollationNullableDefault
prepay_card_idintegernot nullgenerated by default as identity
totalnumeric(12,2)not null
shopper_idintegernot null
created_attimestamp with time zonenot nullCURRENT_TIMESTAMP

我们的第二张表的表结构是这样的:

ColumnTypeCollationNullableDefault
idintegernot nullgenerated by default as identity
prepay_card_idintegernot null
shopper_idintegernot null
totalnumeric(12,2)not null
created_attimestamp with time zonenot nullCURRENT_TIMESTAMP

问如何希望将这两张表结合,导出一个新的表来,能够呈现以下数据。

时间 | 卡号 | 卡面金额 | 销售金额 | 剩余金额 | 处理类型

例如,如果shopper_id为1的用户买了一张预付卡,则会在prepay_card表中有一条数据

prepay_card_idshopper_idtotalcreated_at
111000.002018-12-19 10:34:17.329586+08

然后他又有两笔消费,会在prepay_card_transition表中有两条数据

idprepay_card_idshopper_idtotalcreated_at
111100.002018-12-19 11:34:17.329586+08
211100.002018-12-19 12:34:17.329586+08

则希望得到的数据应该是这样的:

时间  卡号  卡面金额  销售金额  剩余金额 处理类型
2018-12-19 10:34:17.329586+081100001000购卡
2018-12-19 11:34:17.329586+0811000100900消费
2018-12-19 12:34:17.329586+0811000100800消费

如何使用 sql实现这样的计算呢?或者这么说吧,难点其实就是对剩余金额的计算,如果计算剩余金额。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

腹黑女流氓 2022-09-18 16:27:26
WITH data AS (
SELECT created_at, id AS card_id, total, total AS remaining_total FROM prepay_card
UNION ALL
SELECT pct.created_at, pct.prepay_card_id AS card_id, pc.total, -pct.total AS remaining_total
FROM prepay_card_transaction pct 
INNER JOIN prepay_card pc ON pct.prepay_card_id = pc.id
)
SELECT created_at, card_id, total,sum(remaining_total) OVER (PARTITION BY card_id ORDER BY created_at) AS remaining_total_all FROM data
ORDER BY card_id, created_at ;

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文