如何根据日期计算两个金额列的差额余额? [英] How to calculate the balance on the difference of two amount columns based on date?
本文介绍了如何根据日期计算两个金额列的差额余额?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个表,它有两个不同的金额列。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屋!
查看全文