簡體   English   中英

如何根據日期計算兩個金額列差額的余額?

[英]How to calculate the balance on the difference of two amount columns based on date?

我有一個表,其中包含兩個不同的 AMOUNTS 列。 FIRST_AMOUNT 和 SECOND_AMOUNT。 我需要找到兩者差異的平衡點。

例如,下表對於每個 number_id,我們有兩個單獨的金額列。 我需要用 (FIRST_AMOUNT - SECOND_AMOUNT) 來計算差額。 然后在此基礎上,計算查詢中的 BALANCE。

在此處輸入圖像描述

但是,由於我們接收數據的方式,我們需要減去金額的絕對值。 所以 ABS(FIRST_AMOUNT) - ABS(SECOND_AMOUNT)。 但是,如果 FIRST_AMOUNT 和 SECOND_AMOUNT 都為負數,我們需要減法也包含負數。 所以 -80 (first_amount) 和 -32 (second_amount) 將是 (80-32) 的負數,所以 -48。 如果只有一列有負數,則進行正常減法。 所以 -10 (first_amount) 和 0 (second_amount) 將是 -10。

然后我需要一個列來計算從最早日期開始的差額余額。

在此處輸入圖像描述

但是,在最終查詢中,我不想顯示差異列,只顯示余額。 像這樣的東西:

在此處輸入圖像描述

有沒有辦法制定一個可以給出這個結果的查詢?

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 FIRST_AMOUNT 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM