Вы можете попробовать ниже, используя функцию lag()
- она будет работать для MySQL версии 8.0 +
DEMO
select id,Date,value,Unique_Value,case when prevval is null then null else value-prevval end as Difference
from
(
select t1.Id,t1.Unique_Value,t2.Date,t2.value,lag(t2.value,1) over(partition by t1.Unique_Value order by t2.Date) as prevval
from table1 t1 inner join table2 t2 on t1.id=t2.id
)A
ДляMysql версии 5.7 вы можете попробовать ниже -
DEMO
SET @quot=0, @latest=0, @comp=''
select id, Unique_Value,d,value,case when latest=1 then c=null else c end as difference
from
(
select id,Unique_Value,d,value,c,IF(@comp<>Unique_Value,1,0) as LATEST,@comp:=Unique_Value as company from
(
select t1.Id,t1.Unique_Value,value,t2.d,value-@quot as c,@quot:=value
from t1 inner join t2 on t1.id=t2.id
order by t1.Unique_Value,t2.d
)A order by Unique_Value,d
)B
ВЫХОД:
id d value Unique_Value Difference
T-1 2018-01-01 10 OI-45
T-4 2018-03-15 15 OI-45 5
T-8 2018-05-12 25 OI-45 10
T-7 2018-04-01 12 OI-46
T-6 2018-06-01 18 OI-49