![](/img/trans.png)
[英]How to calculate the difference in days based on what is found in different date columns
[英]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.