Sql 计算从一个值移动到另一个值的列的差值
我有以下两个表格: 表1Sql 计算从一个值移动到另一个值的列的差值,sql,oracle,Sql,Oracle,我有以下两个表格: 表1 item_id, sent_from, received_by, month, value values ('1234','A1111','K0000',1,5) values ('1234','K0000','K0000',2,5) values ('1234','K0000','Z0000',3,10) 表2 item_id, sender, value, month values ('1234','A1111',5,1) values ('1234','K0
item_id, sent_from, received_by, month, value
values ('1234','A1111','K0000',1,5)
values ('1234','K0000','K0000',2,5)
values ('1234','K0000','Z0000',3,10)
表2
item_id, sender, value, month
values ('1234','A1111',5,1)
values ('1234','K0000',10,2)
values ('1234','Z0000',20,3)
sent_from、received_by、sender的值的类型和格式相同。
数据如下所示:
表1
item_id, sent_from, received_by, month, value
values ('1234','A1111','K0000',1,5)
values ('1234','K0000','K0000',2,5)
values ('1234','K0000','Z0000',3,10)
表2
item_id, sender, value, month
values ('1234','A1111',5,1)
values ('1234','K0000',10,2)
values ('1234','Z0000',20,3)
我试图调和表1中的值和表2中每个月与前一个月的值之间的差异。例如:
表1中第3个月的值应为10,这与表2中第3-2个月的值之间的差值相同。所以20-10=10。那么10-5=5,那么5-0应该是5,依此类推。下面的影响_值应与表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字段没有像逻辑中那样填充正确的值
编辑:
在表1中插入以下内容:
并在表2中插入以下内容:
使用分析或窗口函数引导可以帮助您获得所需的结果
select t.*, lead(value) over (order by item_id, month) lead_value from table2 t;
上面的查询返回如下结果,您可以将其用作联接中的子查询:
1234A11115110
1234 K0000 102 20
1234 Z0000 20 3空
以下是获取输出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;
这些不是我想要的结果。该值应为:10,5,5选择t.*,值-nvlead_值,选择t.*中的0,按项目id排序的leadvalue,表2 t中的月份描述lead_值;如果我在表格中添加新条目,这将不起作用,请参阅问题中的编辑部分。谢谢您: