[英]calculate difference for a column moving from one value to another sql
我有以下兩個表:
表格1
item_id, sent_from, received_by, month, value
表2
item_id, sender, value, month
send_from,received_by,sender的值是相同的類型和格式。 數據如下:
表格1
values ('1234','A1111','K0000',1,5)
values ('1234','K0000','K0000',2,5)
values ('1234','K0000','Z0000',3,10)
表2
values ('1234','A1111',5,1)
values ('1234','K0000',10,2)
values ('1234','Z0000',20,3)
我正在嘗試調和table1值和table2中從月份到上個月的值之間的差異。 例如:表1中第3個月的值應為10,該值與表2中第3-2個月的值之差相同。 因此20-10 =10。然后10-5 = 5,則5-0應該是5,依此類推。 下面的impact_value應該與表1中的值相同。
以下是我擁有的代碼,但它無法正常工作,並且無法計算正確的值:
select sls.item_id,
sls.sent_from,
sls.received_by,
sum(case when prd.sender = sent_from then -1 * prd.value
else prd.value
end) impact_value,
sls.mnth
from table2 prd
inner join tabl1 sls on (prd.item_id = sls.item_id
and (prd.sender = sls.sent_from
or (prd.sender = sls.received_by
)))
group by sls.item_id,
sls.sent_from,
sls.received_by,
sls.mnth;
但是,impact_value字段未像邏輯中那樣填充正確的值。
編輯:
將以下內容插入到table1中 :
values ('1234','K0000','Z0005',4,40)
values ('1234','BBBBB','ZZZZZ',4,60)
並將以下內容插入table2 :
values ('1234','K0000',60,4)
values ('1234','BBBBB',120,4)
使用分析或窗口函數導聯可以幫助您獲得所需的結果
select t.*, lead(value) over (order by item_id, month) lead_value from table2 t;
上面的查詢返回的結果如下所示,您可以將其用作聯接中的子查詢:
1234 A1111 5 1 10
1234 K0000 10 2 20
1234 Z0000 20 3(NULL)
這是獲取輸出10、5、5的查詢:
select t.*, value - nvl(lead_value, 0) from (select t.*, lead(value) over (order by item_id, month desc) lead_value from table2 t) t;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.