我喜欢下面提到的两个表:
表1
ID Unique_Value
T-1 OI-45
T-4 OI-45
T-8 OI-45
T-7 OI-46
T-6 OI-49
表2
ID Date Value
T-1 2018-01-01 15:13:22 10
T-4 2018-03-15 18:10:45 15
T-8 2018-05-12 05:17:43 25
T-7 2018-04-01 15:13:22 12
T-6 2018-06-01 15:13:22 18
我已将Table2 ID
与Table1 ID
结合在一起,并根据Unique_Value
的唯一值和顺序,以降序和{{ 1}},我想从先前的值中获取特定Date
的差值。
必需的输出将是:
Unique_Value
我曾经尝试使用Lead Log,但是没有用。
答案 0 :(得分:0)
您可以在下面使用lag()
函数进行尝试-适用于8.0+版的mysql
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,您可以在下面尝试-
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