Sql 计算从一个值移动到另一个值的列的差值

Sql 计算从一个值移动到另一个值的列的差值,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

我有以下两个表格:

表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)
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_值;如果我在表格中添加新条目,这将不起作用,请参阅问题中的编辑部分。谢谢您: