如何在mysql中基于日期获取差异

时间:2018-11-29 05:06:49

标签: mysql database

我喜欢下面提到的两个表:

表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,但是没有用。

1 个答案:

答案 0 :(得分:0)

您可以在下面使用lag()函数进行尝试-适用于8.0+版的mysql

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