如何根据日期计算两个金额列的差额余额? [英] How to calculate the balance on the difference of two amount columns based on date?

查看:17
本文介绍了如何根据日期计算两个金额列的差额余额?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个表,它有两个不同的金额列。First_Amount&;Second_Amount。我需要找到两者差异的平衡点。

例如,下表中的每个number_id都有两个单独的金额列。我需要取(First_Amount-Second_Amount)来计算差额。然后在此基础上计算查询中的余额。

但是,由于我们接收数据的方式,我们需要减去金额的绝对值。所以ABS(第一数量)-ABS(第二数量)。但是,如果First_Amount和Second_Amount都为负值,则我们需要减法也包含负值。SO-80(First_Amount)和-32(Second_Amount)将为(80-32),其中SO-48为负值。如果只有一列是负数,则采用正常减法。SO-10(第一数量)和0(第二数量)将为-10。

然后,我需要一个列来计算从最早日期开始的差额余额。

但是,在最后的查询中,我不想显示差额列,只想显示余额。类似以下内容:

有没有办法用公式表示可以产生此结果的查询?

推荐答案

在Snowflake中,这是微不足道的,因为您可以参考以下内容中以前的输出计算,并且Snowflake可以了解如何解析依赖项的顺序,您只需说出您想要的。

当您开始关闭嵌套窗口函数时,这一细分,但目前,它可以在一个挡路中编写。

WITH data(number_id, first_amount, second_amount, date) AS (
    SELECT column1, column2, column3, to_date(column4, 'YYYY-MM-DD') FROM VALUES
    (111, -10, 0, '2021-12-23'),
    (111, -20, 0, '2021-12-22'),
    (111, 30, 0, '2021-12-21'),
    (111, -80, -32, '2021-12-20'),
    (111, 48, 0, '2021-12-19'),
    (111, 5, 5, '2021-12-18'),
    (111, 72, 72, '2021-12-17'),
    (111, 150, 150, '2021-12-16')
)
SELECT number_id
    ,FIRST_AMOUNT 
    ,SECOND_AMOUNT
    ,date
    ,FIRST_AMOUNT - SECOND_AMOUNT as difference
    ,sum( difference )over(partition by number_id order by date rows BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) as balance
FROM data
ORDER BY 1, 4 DESC;

给予:

NUMBER_ID 第一个金额 Second_Amount 日期 差异 余额
111 -10 0 2021-12-23 -10 0
111 -20 0 2021-12-22 -20 10
111 30 0 2021-12-21 30 30
111 -80 -32 2021-12-20 -48 0
111 48 0 2021-12-19 48 48
111 5 5 2021-12-18 0 0
111 72 72 2021-12-17 0 0
111 150 150 2021-12-16 0 0

这篇关于如何根据日期计算两个金额列的差额余额?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆